Как включить пересылку данных между двумя локальными интерфейсами?

Как включить пересылку данных между двумя локальными интерфейсами?

Я установил Ubuntu 11.10 на отремонтированную машину. Я также заменил неисправную сетевую карту на новую сетевую карту, при установке распознаются две сетевые карты. У меня также установлен squid в качестве прокси-сервера. Squid работает хорошо, когда все рабочие станции подключены к маршрутизатору. Однако ... .

Когда я подключаю одну сетевую карту к маршрутизатору (при наличии активного подключения к Интернету), а другую сетевую карту — к коммутатору (без подключения к Интернету), я могу создать две отдельные сети, но не могу понять, как заставить две сетевые карты передавать данные между собой, а также через две сети.

  1. Я пробовал соединить обе карты Ethernet мостом... безуспешно!
  2. Я пробовал обновить iptables... безуспешно!
  3. Я настроил обе сетевые карты на статические адреса... безрезультатно!
  4. Я настроил одну сетевую карту на использование другой в качестве шлюза... безуспешно! Все приводит к ошибке, что пингуемый адрес (сеть, связанная с коммутатором) находится на недостижимом месте назначения.

Что я упускаю?

решение1

Скрипт, описанный @laurent, не нужен, потому что есть канонический способ. Все, что вам нужно сделать, это отредактировать /etc/sysctl.confи раскомментировать (удалить #в начале) эту строку:

net.ipv4.ip_forward = 1

Тогда он будет применен уже при загрузке.

решение2

В Ubuntu по умолчанию отключена функция IP-переадресации, и вам необходимо включить ее для маршрутизации пакетов на вашем компьютере:

для включения введите в терминале как root ( sudo su):

echo 1 > /proc/sys/net/ipv4/ip_forward

Obs: не работает с sudo

И если вы хотите маршрутизировать интернет с этого компьютера, вам может также потребоваться настроить NAT.

РЕДАКТИРОВАТЬ:

1-я команда echo 1 ...не работает с sudo. Вам нужно изменить на root с помощью sudo subefore (потому что sudo запустит echo 1 как root, но попытается перенаправить на файл как ваш пользователь, и это не сработает). В любом случае, вы всегда можете проверить, есть ли 1 с помощью cat /proc/sys/net/ipv4/ip_forward. Наблюдения:это необходимо делать при каждой загрузке, поэтому вы можете написать скрипт и использовать в нем update-rc.d.

Правило POSTROUTING выглядит нормально, если eth0 — это ваш сетевой адаптер интернет-подключения.

Правила FORWARD, которые я использую для установленных и связанных соединений:

-A FORWARD -p tcp -m state -d your_network_ip.0/255.255.255.0 --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -p udp -m state -d your_network_ip.0/255.255.255.0 --state RELATED,ESTABLISHED -j ACCEPT

2-е ОБНОВЛЕНИЕ - Автоматический скрипт:

#!/bin/sh
# turn ip_forward on/off

case "$1" in
'start')
        echo 1 > /proc/sys/net/ipv4/ip_forward
        ;;
'stop')
        echo 0 > /proc/sys/net/ipv4/ip_forward
        ;;
*)
        echo "Usage: $0 { start | stop }"
        ;;
esac
exit 0

Вы сохраняете этот скрипт /etc/init.dпод нужным вам именем ( routerнапример) и делаете его исполняемым ( sudo chmod +x /etc/init.d/router).

Чтобы он запускался при каждой перезагрузке, вам нужно создать стартовые ссылки с update-rc.d:

sudo update-rc.d router defaults

Что еще вам следует проверить:

  • DHCP работает во второй сети и отправляет IP-адрес вашего компьютера в качестве шлюза по умолчанию в подсеть
  • шлюз по умолчанию (IP-адрес вашего компьютера в новой подсети) лучше использовать с фиксированным IP-адресом
  • Вы прокомментировали, что не можете пропинговать вторую сетевую карту, но откуда? Из подсети, с вашего компьютера или с компьютеров, подключенных напрямую к маршрутизатору?
  • squid установлен на вашем компьютере? Вы изменили конфигурацию, включив новую подсеть? Вам нужен squid? Его не очень легко настроить, и вы можете прекрасно использовать Интернет и сеть без него, если вам не нужны его дополнительные функции.

Obs: сообщение update-rc.d в порядке, с ним нет проблем. Теперь у вас всегда должно быть 1 в файле ip_forward.

решение3

Я попробовал воспользоваться этим советом и столкнулся с проблемой, которая здесь не рассматривается: следующий компьютер должен знать, как вернуться к предыдущему компьютеру.

В моем случае у меня есть 2 сети: сеть WiFi, 192.168.1.0/24, и сеть Ethernet, 192.168.40.0/24. Мой «маршрутизатор» — это ноутбук с приемопередатчиком WiFi на 192.168.1.0/24 и интерфейсом Ethernet на сети 192.168.40.0/24. Домашний маршрутизатор также имеет приемопередатчик WiFi и интерфейс Ethernet, но этот приемопередатчик Ethernet подключается к Интернету. Домашний маршрутизатор также имеет транслятор сетевых адресов (NAT). Домашний маршрутизатор имеет таблицу маршрутизации, и эта таблица маршрутизации имеет запись маршрута по умолчанию, которая обычно указывает на маршрутизатор поставщика услуг Интернета (ISP).

Когда компьютер в сети 192.168.40.0/24 хотел отправить пакет на какой-то компьютер в Интернете, он сверялся со своей таблицей маршрутизации и знал, что шлюзом по умолчанию был ноутбук, 192.168.40.1. Когда пакет приходил на ноутбук, он сверялся со своей таблицей маршрутизации и пересылал пакет на домашний маршрутизатор. Домашний маршрутизатор сверялся со своей таблицей маршрутизации, проходил через преобразование сетевых адресов (деталь, которую мы можем проигнорировать в этом обсуждении), а затем на маршрутизатор интернет-провайдера. В какой-то момент машина назначения захочет отправить пакет на мой компьютер. Пакет прибудет на домашний маршрутизатор, пройдет через обратный NAT, а затем должен будет маршрутизироваться. Когда пакет выйдет из NAT, у него будет адрес назначения IPv4 в сети 192.168.40.0/24. Именно в этот момент я столкнулся с проблемой: домашний маршрутизатор не знал о сети Ethernet, 192.168.40.0/24. Поэтому он сделал то, что должен был сделать — переслал этот пакет на свой маршрутизатор по умолчанию, т. е. маршрутизатор провайдера.

Чтобы решить эту проблему, мне пришлось сделать запись в таблице маршрутизации домашнего маршрутизатора, которая сообщает ему, что для доступа к любому компьютеру в сети 192.168.40.0/24 необходимо отправить пакет на WiFi-адрес ноутбука, который находится в 192.168.1.0/24. Теперь, когда пакет приходит на ноутбук, ноутбук знает о сети 192.168.40.0/24 и направляет пакет туда.

Связанный контент