LINUX.ORG.RU
решено ФорумAdmin

NAT с одним сетевым интерфейсом

 , , ,


0

2

Необходимо решить следующую задачу... В сети 192.168.1.0/24 присутствуют 3 устройства: 192.168.1.1 - точка доступа с web интерфейсом для администрирования (порт 80), 192.168.1.20 - Windows XP, 192.168.1.160 - Raspberry PI с сетевым интерфейсом eth0.

Хочу, используя iptables на Raspberry, настроить проброс портов, чтобы при обращении на 192.168.1.160:80 пакеты уходили на 192.168.1.1:80. Т.е., открыв в браузере на windows xp адрес 192.168.1.160, я попал в web панель точки доступа. Напрямую, на 192.168.1.1, естественно web морда открывается.

вот мои правила:

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.1

iptables -t nat -A POSTROUTING -s 192.168.1.1 -j SNAT --to-source 192.168.1.20

Эти правила я настроил для случая, если запрос будет исходить от машины 192.168.1.20

Дополнительно я еще добавлял

iptables -A FORWARD -i eth0 -o eth0 -s 192.168.1.0/24 -j ACCEPT

iptables -A FORWARD -i eth0 -o eth0 -d 192.168.1.0/24 -j ACCEPT

и отдельно активировал echo 1 > /proc/sys/net/ipv4/ip_forward

По итогам этой настройки получить доступ с 192.168.1.20 на 192.168.1.1 через 192.168.1.160 не получилось

Следующим шагом я удалил цепочки FORWARD, посчитав, что если у меня сетевой интерфейс один, то они не нужны. Это также не поменяло общей картины (

Запрашиваю информацию с учетом счетчиков iptables -t nat -L -n -v --line-numbers

вот ответ:

Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)

num pkts bytes target prot opt in out source destination

1 0 0 DNAT tcp  — * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:192.168.1.1

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

num pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 3 packets, 213 bytes)

num pkts bytes target prot opt in out source destination

Chain POSTROUTING (policy ACCEPT 3 packets, 213 bytes)

num pkts bytes target prot opt in out source destination

1 0 0 SNAT all  — * * 192.168.1.1 0.0.0.0/0 to:192.168.1.20

Как видно, наши цепочки пока ничего не проходило. Делаю запрос из браузера на машине 192.168.1.20 по адресу 192.168.1.160 и после этого вновь запрашиваю информацию по цепочкам:

Chain PREROUTING (policy ACCEPT 2 packets, 458 bytes)

num pkts bytes target prot opt in out source destination

1 2 128 DNAT tcp  — * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:192.168.1.1

Chain INPUT (policy ACCEPT 2 packets, 458 bytes)

num pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 43 packets, 3029 bytes)

num pkts bytes target prot opt in out source destination

Chain POSTROUTING (policy ACCEPT 45 packets, 3157 bytes)

num pkts bytes target prot opt in out source destination

1 0 0 SNAT all  — * * 192.168.1.1 0.0.0.0/0 to:192.168.1.20

На сколько я понимаю, через цепочку PREROUTING прошло 2 пакета, а вот обратно через POSTROUTING нет (

Подскажите, где ошибка? Может чего не хватает...


iptables -t nat -A POSTROUTING -d 192.168.1.1 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.1.160

MumiyTroll ★★ ()
Ответ на: комментарий от MumiyTroll

заработало!

Спасибо! В итоге у меня всего 2 правила:

-A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.1

-A POSTROUTING -d 192.168.1.1/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.1.160

poleg ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.