Как я могу установить свой linux box в качестве маршрутизатора для пересылки IP-пакетов?

25

Я провожу сетевой эксперимент по пересылке IP-пакетов, но я не знаю, почему он работает.

У меня есть машина linux с двумя сетевыми интерфейсами, eth0 и eth1, оба со статическим IP-адресом (eth0: 192.168.100.1, eth1: 192.168.101.2).

Моя цель проста, я просто хочу переслать ip-пакеты из eth1 с адресатом в подсети 192.168.100.0/24 в eth0 и переслать ip-пакеты из eth0 с адресатом в подсети 192.168.101.0/24 в eth1.

Я включил IP-пересылку с:

sysctl -w net.ipv4.ip_forward=1

моя таблица маршрутизации выглядит так:

# route -n
Kernel IP routing table
Destination     Gateway     Genmask        Flags Metric Ref   Use  Iface
192.168.100.0   0.0.0.0     255.255.255.0  U     0      0       0  eth0
192.168.101.0   0.0.0.0     255.255.255.0  U     0      0       0  eth1

Но, когда я пытаюсь пинговать с 192.168.100.25 до 192.168.101.47, это не работает.

Ишу Фан
источник

Ответы:

23

Вам нужно добавить правило пересылки, используя iptablesкоманду, примерно так:

modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth1 -j ACCEPT

см. man iptablesдля получения дополнительной информации или поиска в Интернете статьи с инструкциями, например, Как настроить маршрутизатор NAT на компьютере под управлением Linux

Вот Linux IP Masquerade HOWTO, в котором подробно обсуждается эта тема.

Вы также должны убедиться, что у вас нет других правил (например, в FORWARDцепочке), которые отменяют вышеуказанное ACCEPTправило. Если есть, вы, вероятно, хотите удалить их.

Сергей
источник
Я не знаю почему, но это все еще не работает. Я добавил iptables -A FORWARD -i eth0 -o eth1 -j ACCEPTи iptables -A FORWARD -i eth1 -o eth0 -j ACCEPTк моим таблицам. И моя политика INPUT, OUTPUT и FORWARD - все ACCEPT.
Ишу Клык
Есть много вещей, которые можно настроить неправильно. Например, IP-адрес вашего хоста должен быть указан как «IP-адрес шлюза» на хостах во «внутренней» сети, поэтому они знают, что если IP-адрес не находится в диапазоне их «локальной» сети, пакеты необходимо отправлять на ваш шлюз машина. Это похоже на обычную настройку, когда ADSL-маршрутизатор зарегистрирован в качестве шлюза для хостов в локальной сети
Сергей
Когда я использую tracerouteна своем хосте, это показывает, что пакет идет к «маршрутизатору» (192.168.100.1), но это не идет дальше.
Ишу Клык
1
@UniMouS: Кажется, я забыл про MASQUERADE - я отредактировал свой ответ и добавил новые ссылки на статьи.
Сергей
3

Вам необходимо добавить маршрут к 192.168.100.25 и 192.168.101.47.

Если ваш сервер пересылки имеет IP-адреса 192.168.100.1 и 192.168.101.1, вы должны добавить в клиент 192.168.100.25

ip route 192.168.101.0/24 via 192.1268.100.1

и в клиенте 192.168.101.47

ip route 192.168.100.0/24 via 192.168.101.1

(Это работает только с включенной пересылкой, без iptables).

В. Кампос
источник