К сожалению, у меня очень мало практики с маршрутизацией в Linux, а также я не смог правильно сформулировать свою проблему для поиска.
Итак, я объясню проблему здесь. На картинке ниже вы видите топологию моей сети. Цель состоит в том, чтобы клиентское устройство с IP-адресом 10.0.0.50 могло получить доступ к целевому устройству с IP-адресом 192.168.0.1.
Установка правильного маршрута на клиентском устройстве не является моей целью, потому что может быть несколько клиентских устройств с необходимостью доступа к 192.168.0.1. Из-за того, что у меня нет доступа ко всем клиентам, не стоит настраивать их индивидуально для достижения цели.
Пока что я пробовал установить маршрут на шлюзе 10.0.0.1 с route add -net 192.168.0.0/25 gw 10.0.0.99
. Шлюз правильно (должен быть) настроен для пересылки пакетов, потому что я использую его как шлюз для всей сети для доступа в Интернет. Так iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE
устанавливается, а также переадресация IP echo 1 > /proc/sys/net/ipv4/ip_forward
. route
показывает следующий вывод на шлюз:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 123.123.123.1 0.0.0.0 UG 202 0 0 eth0
10.0.0.0 * 255.255.255.128 U 0 0 0 br0
123.123.123.2 * 255.255.255.252 U 0 0 0 eth0
192.168.0.0 10.0.0.99 255.255.255.128 UG 0 0 0 br0
Конфигурация на сервере 10.0.0.99 включает правила iptable для маскировки и переадресации ip. route
показывает следующий вывод на сервер:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default tower 0.0.0.0 UG 204 0 0 br0
default 192.168.0.1 0.0.0.0 UG 303 0 0 wlan0
10.0.0.0 * 255.255.255.128 U 0 0 0 br0
192.168.0.0 * 255.255.255.128 U 0 0 0 wlan0
С помощью настройки, описанной выше, я могу пинговать 192.168.0.1 как с сервера, так и со шлюза, но клиенты не могут этого сделать. Трассировка для проверки того, что происходит, застревает на шлюзе 10.0.0.1 и больше не работает.
Я также пытался установить iptables -A POSTROUTING -t nat -o br0 -j MASQUERADE
на шлюзе, чтобы проверить, является ли это проблемой, но это правило не помогло, поэтому я удалил его снова.
Что мне здесь не хватает? Пожалуйста, помогите мне. Большое спасибо!
man ip
и прочтите руководства по iproute).ip route add 192.168.0.0/25 via 10.0.0.99
sysctl -w sys.net.ipv4.conf.br0.send_redirects
.ip route get 192.168.0.1 from 10.0.0.50 iif br0
. Результат должен выглядеть как192.168.0.1 from 10.0.0.50 via 10.0.0.99 dev br0
cache iif br0
SNAT/MASQUERADE
правило, чтобы ответы проходили через интернет-шлюз, а не напрямую от сервера к клиенту:iptables -t nat -A POSTROUTING \
-o br0 \
--src 10.0.0.0/24 --dst 192.168.0.0/25 \
-j SNAT --to 10.0.0.1
sysctl -w sys.net.ipv4.ip_forward=1
ip route add 10.0.0.0/24 via 192.168.0.X
, где 192.168.0.X
это адрес сервера в 192.168.0.0/25
подсеть) или настройте NAT на самом сервере (iptables -t nat -A POSTROUTING -o wlan0 --src 10.0.0.0/24 --dst 192.168.0.1 -j MASQUERADE
).