Я установил Ubuntu 11.10 на отремонтированную машину. Я также заменил неисправную сетевую карту на новую сетевую карту, при установке распознаются две сетевые карты. У меня также установлен squid в качестве прокси-сервера. Squid работает хорошо, когда все рабочие станции подключены к маршрутизатору. Однако ... .
Когда я подключаю одну сетевую карту к маршрутизатору (при наличии активного подключения к Интернету), а другую сетевую карту — к коммутатору (без подключения к Интернету), я могу создать две отдельные сети, но не могу понять, как заставить две сетевые карты передавать данные между собой, а также через две сети.
- Я пробовал соединить обе карты Ethernet мостом... безуспешно!
- Я пробовал обновить iptables... безуспешно!
- Я настроил обе сетевые карты на статические адреса... безрезультатно!
- Я настроил одну сетевую карту на использование другой в качестве шлюза... безуспешно! Все приводит к ошибке, что пингуемый адрес (сеть, связанная с коммутатором) находится на недостижимом месте назначения.
Что я упускаю?
решение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 su
before (потому что 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 и направляет пакет туда.