У меня есть машина с несколькими интерфейсами, которые я могу настроить, как я хочу, например:
- eth1: 192.168.1.1
- eth2: 192.168.2.2
Я хотел бы перенаправить весь трафик, отправленный на один из этих локальных адресов через другой интерфейс. Например, все запросы к серверу iperf, ftp, http по адресу 192.168.1.1 должны быть не только внутренне направлены, но и направлены через eth2 (а внешняя сеть позаботится о перенаправлении пакета на eth1).
Я попробовал и просмотрел несколько команд, таких как iptables, ip route и т. Д., Но ничего не получалось.
Самое близкое поведение, которое я мог получить, было сделано с:
ip route change to 192.168.1.1/24 dev eth2
который отправляет все 192.168.1.x на eth2, за исключением 192.168.1.1, который все еще маршрутизируется внутри. Может быть, тогда я смогу сделать пересылку NAT всего трафика, направленного на фальшивку 192.168.1.2 на eth1, перенаправленного на 192.168.1.1 изнутри? Я на самом деле борюсь с iptables, но это слишком сложно для меня.
Целью этой настройки является тестирование драйвера интерфейса без использования двух компьютеров.
Я использую Linux, но если вы знаете, как это сделать с Windows, я куплю это!
Редактировать:
Внешняя сеть - это просто перекрестный кабель между eth1 и eth2. Допустим, у меня есть http-сервер на моей машине. Теперь я хочу получить доступ к этому серверу с той же машины, но я хочу, чтобы трафик TCP / IP проходил через этот кабель eth1 / eth2. Как мне настроить мои интерфейсы для этого?
источник
Ответы:
Я расширил ответ Каладоны, так как не мог видеть ответные пакеты. Для этого примера:
Для локальных компьютеров iptable-маршруты установлены исходящий трафик SNAT и DNAT на «поддельный» IP.
Правила делают следующее:
Подводя итог, можно сказать, что локальная система теперь может общаться с «виртуальной» машиной с адресами 192.168.1.100 и 192.168.2.100.
Затем вы должны заставить свой локальный ПК использовать внешний маршрутизатор для достижения вашего поддельного IP. Вы делаете это, создавая прямой маршрут к IP через маршрутизатор. Вы хотите убедиться, что вы форсируете пакеты в противоположность подсети назначения.
Наконец, чтобы все это работало, внешний маршрутизатор должен знать, как получить поддельные IP-адреса на вашем локальном ПК. Вы можете сделать это, включив прокси-ARP для вашей системы.
С помощью этой настройки вы можете теперь рассматривать поддельные IP-адреса как реальную систему на вашем локальном ПК. Отправка данных в подсеть .1 заставит пакеты покинуть интерфейс .2. Отправка данных в подсеть .2 заставит пакеты покинуть интерфейс .1.
источник
Я успешно использовал следующее в Linux для проверки пропускной способности на новой двухпортовой карте 10 Гбит / с в режиме «loopback», то есть один порт подключен непосредственно к другому. Это всего лишь немного вуду, просто чтобы заставить пакеты выходить из сети, но если вы этого не сделаете, Linux просто закоротит трафик через ядро (отсюда и вопрос ОП). В ответе Кейси выше я не уверен, было ли действительно необходимо иметь внешний маршрутизатор или нет, но следующее полностью автономно. Два интерфейса - это eth2 и eth3.
Назначьте IP-адреса интерфейсам и разместите их в отдельных сетях:
Далее мы настроим сценарий двойной NAT: две новые поддельные сети используются для связи с другой. На выходе исходный NAT для вашей поддельной сети. По пути зафиксируйте пункт назначения. И наоборот для другой сети:
Теперь скажите системе, как добраться до каждой фальшивой сети, и предварительно заполните записи arp (не забудьте заменить свои MAC-адреса, не используйте мои):
Это дурачит Linux достаточно, чтобы на самом деле положить пакеты на провод. Например:
выходит из eth2, исходный IP 10.50.0.1 получает NAT в 10.60.0.1, а когда он входит в eth3, адрес 10.60.1.1 получает NAT в 10.50.1.1. И ответ отправляется в аналогичное путешествие.
Теперь используйте iperf для проверки пропускной способности. Свяжите с правильными IP-адресами и убедитесь, с каким IP-адресом вы связываетесь (фальшивый адрес другого конца):
Убедитесь, что трафик действительно идет на провод:
Вы также можете посмотреть / proc / interrupts, чтобы быть абсолютно уверенным, что карта используется:
Во всяком случае, я нашел этот пост в поисках того, как это сделать, спасибо за вопросы и ответы, и надеюсь, что это поможет кому-нибудь еще найти этот пост в будущем.
источник
Как всегда - я немного опоздал - но в настоящее время можно использовать сетевые пространства имен, чтобы изолировать интерфейсы и предотвратить любую локальную пересылку (и возиться с iptables :)).
Создайте пространства имен (все сделано с необходимыми разрешениями, например, как root):
Обратите внимание, что к интерфейсам status / config теперь нужно обращаться в контексте назначенного пространства имен - поэтому они не будут отображаться, если вы запускаете голую IP-ссылку, так как она запускается в контексте пространства имен по умолчанию. Выполнение команды в пространстве имен можно выполнить с помощью
в качестве префикса.
Теперь назначьте пространства имен интерфейсам, примените конфигурацию и настройте интерфейсы:
Теперь вы можете запускать приложения в пространстве имен - для запуска сервера iperf
и клиент:
Теперь трафик будет передаваться через физические интерфейсы, поскольку весь сетевой стек, интерфейс, маршрутизация ... изолированы пространствами имен, поэтому ядро не может сопоставить адреса, используемые в трафике, с локальными (доступными) интерфейсами.
Если вы закончили свои эксперименты, просто удалите пространства имен:
Интерфейсы будут переназначены на пространство имен по умолчанию, и вся конфигурация, выполненная в пространстве имен, исчезнет (например, нет необходимости удалять назначенные IP-адреса).
источник
Хорошо, наконец-то мне удалось настроить мой конфиг.
Идея состоит в том, чтобы использовать другой поддельный адрес, чтобы принудительно настроить маршрут этого поддельного адреса к интерфейсу 2, а затем преобразовать поддельный адрес с реальным адресом 2 с помощью NAT / iptables.
Моя установка фактически состоит из одного маршрутизатора, который я могу подключить между IF1 (интерфейс 1) и IF2.
В моем случае FAKE_ADDR и IF1_ADDR находятся в одной подсети.
И на роутере:
Если я отправляю что-то в FAKE_ADDR, pkt пересылается через IF1 на маршрутизатор, снова пересылается в IF2, затем FAKE_IP заменяется IF2_ADDR. Пакет обрабатывается сервером, результат отправляется обратно в IF1_ADDR, из IF2_ADDR, который заменяется FAKE_ADDR.
Возможно, можно использовать более простую конфигурацию только с одним перекрестным кабелем, но, поскольку я не пробовал, я предпочитаю дать свое рабочее решение.
источник
Ответ, данный выше Томасом Таннхойзером, был точным!
У меня была похожая ситуация: одна машина с двумя интерфейсами enet. Я планировал использовать один интерфейс в качестве сервера (получателя), а другой - в качестве клиента (отправителя). Каждый интерфейс будет подключен к маршрутизатору, а iperf будет направлять трафик через маршрутизатор для измерения пропускной способности, PPS, задержки и т. Д.
К сожалению, подход iptables был не интуитивным и чреват проблемами. После нескольких разочаровывающих часов я отказался от этого плана атаки. Вдохновленный предложением Томаса, я немного поработал над пространствами имен Linux IP и начал ценить простоту и элегантность этого решения.
Ниже приведен список точных команд, которые я использовал для настройки своего Fedora FC26 для работы в этом качестве. Два интерфейса - это enp1s0 и enp3s0. Маршрутизатор имеет два интерфейса с адресами 192.168.2.112 и 172.16.16.2. Каждый разъем FC26 ENET напрямую подключен к соответствующему интерфейсу маршрутизатора.
источник
Звучит так, будто вы хотите превратить свой Linux-блок в типовой маршрутизатор / мост / шлюз / брандмауэр. Следующие ресурсы могут быть тем, что вы ищете:
Проект Linux Router
Список дистрибутивов маршрутизаторов или брандмауэров
Linux LiveCD Router
Linux Journal - Маршрутизатор Linux
Обновление на основе дополнительной информации:
Я не думаю, что вы сможете делать то, что вы хотите. Операционная система всегда собирается просматривать свою внутреннюю таблицу маршрутизации и «видеть» оба IP-адреса локально. Затем он будет маршрутизировать трафик внутри ОС и никогда не подключать его к сети. Вам понадобится вторая машина или две виртуальные машины (посмотрите Xen ).
источник
Здесь многое предстоит пройти, поэтому я не могу полностью гарантировать свою точность, но первоначальный вопрос, похоже, исходит из того, что известно как техника «отправить себе» . Связанный поиск показывает, что я считаю лучшим поддерживаемым патчем ядра, как top link + обсуждения и патчи с другими подходами в различных списках рассылки, esp. LKML.
Я думаю, что нужно также взглянуть на сетевые пространства имен , сделанные с помощью ip netns iproute2 . Это также требует некоторого дополнительного интерфейса и магии маршрутизации, поэтому может быть даже не менее сложным, чем массивная шумиха по iptables в других ответах.
Комментарии, безусловно, приветствуются, если кто-то найдет что-то полезное с этим - как, что, где о вашей реализации
источник
Проверьте эту статью. Здесь подробно описаны шаги для включения доступа в интернет к virtualbox vm с использованием переадресации NAT.
http://jackal777.wordpress.com/2012/02/13/virtualbox-host-only-networking-nat-for-internet-access/
источник
вот как у меня это работает на IPV6
назначенные статические ips
настроить маршруты только для хоста на адреса "FAKE"
заселил соседский стол ... как арп
добавил записи ip6tables
источник