Вступление Соображения
Прежде чем реализовать что-либо из этого, было бы очень полезно узнать, что на самом деле делает маршрутизация.
Маршрутизация не меняет сетевых адресов. (Ну, NAT делает. И NAT может быть выполнен, пока применяется маршрутизация. Однако, если вы хотите научиться делать что-то, вы должны стараться сделать вещи простыми. И лучше всего думать о простой / традиционной маршрутизации как о отдельном процессе, потому что это гораздо проще думать об этом.)
Прежде чем смотреть на изменение таких вещей, как адреса, давайте удостоверимся, что есть полное понимание того, как на самом деле работают эти вещи, чтобы мы не пытались делать что-то, что будет нарушать общие правила проектирования сети (и которые, вероятно, будут отвергнуты большинством оборудования и программное обеспечение, которое обычно реализует эти правила). Если этот материал будет изучен, то, по крайней мере, если мы попробуем что-то сумасшедшее, мы поймем, что то, что мы пытаемся, сумасшедшее, и будем мысленно подготовлены к тем типам препятствий, с которыми мы пытаемся столкнуться. Это намного лучше, чем не знать эти детали.
О маршрутизации
Маршрутизация обычно предназначена для обеспечения того, чтобы трафик поступал из одной сети (часто называемой "подсетью" или "подсетью") в другую сеть.
Когда ваш компьютер отправляет сетевой трафик, он, скорее всего, отправляет "кадры" сетевого трафика. Эти кадры называются трафиком уровня 2. (Уровень 1 ориентирован на физические соединения, такие как кабели или антенны и радиоволны.) Кадры доставляются по адресам MAC-48 (также известным как адреса EIU-48, и гораздо чаще просто называются «MAC-адресами»). Наиболее распространенные способы доставки кадров - использование Ethernet (через медные кабели UTP) или Wi-Fi.
Кадры, как правило, содержат пакеты. Наиболее распространенными типами пакетов в наши дни являются IPv6 и IPv4. (Вероятно, не в таком порядке ...) Эти пакеты считаются трафиком уровня 3. Пакеты, как правило, содержат сегменты TCP или дейтаграммы UDP, которые являются трафиком уровня 4. Я использую термин "уровень" в соответствии с тем, что описывается "моделью OSI", которая обычно преподается на многих уроках / тренингах по работе с сетями профессионального уровня.
Теперь предположим, что вы на 192.168.1.103 и хотите общаться с 4.2.2.2. Это может быть трафик UDP-порта 53 (DNS), но вместо этого я буду использовать ICMP (ping).
Обычно ваш компьютер сравнивает 192.168.1.103 и размер вашей сети, который определяется длиной префикса (например, IPv4 /24). Длина префикса (особенно IPv6 /64) наиболее распространена для IPv6. Для IPv4 размер сети очень часто записывается в виде маски подсети. Двоичные значения общих масок подсети начинаются со всех, со всеми нулями ближе к концу масок подсети, поэтому вы часто заканчиваете с масками подсети, такими как 255.255.255.0. Используя эти примеры IPv4 /24 и 255.255.255.0, размер сети составляет 256 адресов. Таким образом, компьютер определяет, какие адреса будут в начале и в конце группы из 256 адресов, если все возможные интернет-адреса будут разделены на группы одинакового размера такого размера. Таким образом, если бы все возможные интернет-адреса были разбиты на группы по 256 адресов, то 192.168.1.103 были бы в группе, которая идет от 192.168.1.0 и 192.168.1.255 (включительно).
Поскольку желаемый пункт назначения - 4.2.2.2, а 4.2.2.2 не находится между 192.168.1.0 и 192.168.1.255, то трафик не просто отправляется на MAC-адрес 4.2.2.2 с использованием фрейма. (Мы вряд ли сможем использовать протокол разрешения адресов IPv4 (ARP) или протокол обнаружения соседей (если мы использовали IPv6) для обнаружения MAC-адреса, поскольку он находится в другой сети. Это связано с ограничениями, которые влияют на ARP и IPv6 NDP.) Итак, если мы не можем отправить туда фрейм, как мы можем общаться с 4.2.2.2?
По маршрутизации. Мы можем найти шлюз, который поможет нам получить трафик до 4.2.2.2. Для наиболее распространенного потребительского оборудования люди часто используют только два типа сетей: сеть, частью которой является компьютер, и всемирный Интернет. (Корпорации иногда имеют несколько сайтов и могут иметь другие сети.) Шлюз, предназначенный для обработки адресов в любую точку мира (весь Интернет), иногда называют "последним средством" и гораздо чаще называют "шлюзом по умолчанию". Это шлюз, который будет использоваться для любого адреса, если не существует более конкретного шлюза.
Итак, ваш компьютер отправит запрос IPv4 ARP для шлюза по умолчанию, который должен быть в вашей сети. Как правило, это будет первый "используемый" адрес в вашей сети. (Из-за некоторых очень старых стандартов вещания и, возможно, также из-за некоторой общей путаницы, многие люди просто считают первый адрес подсети непригодным для использования. Это включает создателей некоторого программного и аппаратного обеспечения, поэтому решения этих людей часто влияют на нас. Так что 192.168.1.0 может быть непригодным в этом примере.) Таким образом, 192.168.1.1 может быть первым используемым адресом и может быть шлюзом по умолчанию. Я буду использовать этот пример.
Как только ваш компьютер определит MAC-адрес вашего шлюза по умолчанию, он отправляет ICMP-сообщение с использованием IP-пакета, адресованного для 4.2.2.2, и этот IP-пакет является частью кадра, который переходит на MAC-адрес шлюз.
Таким образом, сетевой трафик, содержащий сообщение ICMP, фактически не отправляется на IP-адрес 192.168.1.1. Трафик отправляется на MAC-адрес, связанный с 192.168.1.1.
Затем ваш локальный маршрутизатор будет обращать внимание на трафик, потому что трафик идет на MAC-адрес. Поскольку это маршрутизатор, он будет взаимодействовать путем маршрутизации трафика. Таким образом, ваш маршрутизатор выяснит, знает ли он, как общаться напрямую с 4.2.2.2, находясь в той же сети. По всей вероятности, ваш маршрутизатор не будет знать, как получить MAC-адрес 4.2.2.2. Таким образом, процесс повторяется, так как ваш маршрутизатор затем "направит" трафик на MAC-адрес другого маршрутизатора, который может быть расположен у вашего интернет-провайдера (ISP).
Теперь, смысл объяснения всего этого заключается в том, что даже если вам все-таки удалось заставить ваш компьютер перевести 10.10.10.10 на 20.20.20.20, это может оказаться бесполезным, если принимающее оборудование не ожидает трафика для 10.10.10.10. Принимающее устройство в 20.20.20.20 может принимать трафик, но может игнорировать его, если трафик предназначен для 10.10.10.10.
Имейте в виду, что в моем рабочем примере, даже несмотря на то, что IP-трафик был отправлен на MAC-адрес, связанный со шлюзом по умолчанию, назначение IP-пакета 4.2.2.2 оставалось неизменным в течение всего процесса маршрутизации трафика.
Итак, если вы пытаетесь изменить IP-адрес назначения, это не простая маршрутизация. Это NAT. NAT - это аббревиатура для трансляции сетевых адресов. Таким образом, когда сетевой трафик включает определенный сетевой адрес (10.10.10.10), он переводится на другой адрес (20.20.20.20). Смотрите: NAT в Windows.
Предел TCP
Обратите внимание, что большая часть интернет-трафика использует TCP. Если вы пытаетесь настроить TCP-соединение на 20.20.20.20, требование TCP для двусторонней связи может вызвать некоторые проблемы. Даже если вы могли бы получать трафик, отправленный на 20.20.20.20, тогда 20.20.20.20 должен иметь возможность успешно отвечать, потому что TCP требует двусторонней связи для завершения "рукопожатия TCP" в начале соединения TCP, перед любым ваших ("полезных данных") данных отправлено. Если ваша программа считает, что она отправляет трафик на 10.10.10.10, то ваша программа не будет принимать ответный трафик с 20.20.20.20. Таким образом, в дополнение к NAT для исходящего трафика, вам также может понадобиться обратить эффекты NAT, если вы используете TCP. TCP очень распространен, например, HTTP (веб) и SMTP (электронная почта). Основными исключениями является трафик, который очень мал (например, классический DNS, который использует UDP. Другим примером является ICMP) или трафик, который очень чувствителен к медлительности (может быть VOIP, новости (например, цены на акции, где старая информация бесполезна, чем повторное обновление новой информации), игры в реальном времени). Может быть очень полезно узнать, будет ли протокол, который вы собираетесь использовать, опираться на протокол более низкого уровня, такой как TCP. Сетевой сниффинг (например, tcpdump или Wireshark) также может быть очень полезен для понимания того, почему что-то не работает.
Наличие NAT
Как правило, вы не беспокоитесь о NAT на компьютерах конечных пользователей. Как правило, это делается маршрутизатором. Некоторые версии Windows поддерживают функцию маршрутизатора, что означает, что компьютер может обрабатывать сетевой трафик аналогично тому, как другие маршрутизаторы обрабатывают трафик.
Этот вопрос имеет тег "Windows", поэтому я предполагаю, что вы хотите сделать это с помощью программного обеспечения, встроенного в Microsoft Windows, и я думаю, что NAT будет поддерживаться функцией под названием "Маршрутизация". В современных версиях Windows эта функция встроена в некоторые программы под названием "Маршрутизация и удаленный доступ" (сокращенно "RRAS").
Насколько я знаю, RRAS часто не поддерживается "домашними" версиями Microsoft Windows. Он часто поддерживается выпусками Windows Server (например, Windows Server 2008 R2). Я думаю, что он может поддерживаться выпусками "Professional" для конечных пользователей, такими как "Windows 7 Professional". Я подозреваю, что эта функция может отсутствовать в выпусках Home, таких как "Windows 7 Home".
Даже если эта функция потенциально доступна в вашей версии Windows, она, вероятно, настолько отключена по умолчанию, что даже удалена. Таким образом, вам может потребоваться перейти к месту, где вы можете установить компоненты Windows (например, "Диспетчер сервера", или, возможно, апплет Панели управления, который включает в себя слово "Программы", как часть его имени, а затем левый кадр этого апплета иметь гиперссылку для добавления / установки / включения "функций").
Теперь, теоретически, вы можете указать компьютеру направлять трафик на прокси-сервер, который транслирует трафик и отправляет его как другой IP-адрес. Так что то, о чем вы просите, может быть возможным.
подходы
Одна из возможных альтернатив: рассмотрите возможность манипулирования DNS вместо IP-трафика. например, укажите DNS-имя на другой IP-адрес, возможно, с помощью CNAMES (если вы можете повлиять на записи DNS для соответствующих доменных имен) или с помощью файлов хостов. Зачастую это гораздо проще реализовать и отменить (если вы решили отменить свои изменения).
Скорее всего, очень, очень хорошо, что это не будет лучшим подходом к тому, чего вы действительно пытаетесь достичь. Поймите, что попытка сделать что-то нормально, в соответствии с правилами, может быть очень сложной. Попытка придумать свои собственные способы ведения дел намного сложнее. Крайне нежелательно становиться слишком изобретательным при проектировании сетей, прежде чем вы имели опыт успешного проектирования сетей с использованием стандартных методов, и вы знаете ограничения стандартных методов (и, вероятно, также, почему эти ограничения существуют), и вы действительно знаете, что вы ' лучше (и почему лучше). В противном случае вы можете столкнуться с множеством проблем. (Я могу говорить из некоторого опыта. В конце концов, я просто научился пытаться делать вещи простым способом.)
Вопрос выглядит как классический случай проблемы XY. Если вы пытаетесь достичь чего-то другого, кроме того, о чем вы только что просили, попробуйте создать другой вопрос, в котором вы спрашиваете о том, чего вы действительно пытаетесь достичь.