Назад | Перейти на главную страницу

как проверить правила переадресации портов iptables

Я пытался заставить перенаправление портов работать на машине. Я прочитал здесь много тем, касающихся этой проблемы, но я не могу заставить ее работать. План состоит в том, чтобы перенаправить весь входящий трафик на ppp0 на порт 5000 на устройство на eth0. Вот правила, которые я пробовал (собраны с этого сайта):

iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 5000 -j DNAT --to-destination 192.168.5.242:5000
iptables -A FORWARD -p tcp -d 192.168.5.242 --dport 5000 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -j MASQUERADE -o ppp0

Это не сработало. Следующая попытка была такой:

iptables -A PREROUTING -t nat -i ppp0 -p tcp --dport 5000 -j DNAT --to 192.168.5.242:5000
iptables -A INPUT -p tcp -m state --state NEW --dport 5000 -i ppp0 -j ACCEPT
iptables -t nat -A POSTROUTING -j MASQUERADE -o ppp0

При доступе к этому компьютеру на этом порту я получаю отказ в соединении без этих правил и тайм-аут соединения с правилами. Итак, что-то работает, но не так, как задумано.

Как я могу проверить, что делаю не так?

Вам нужно использовать правило FORWARD с PREROUTING. Причина в том, что изменение IP-адреса назначения выполняется до применения каких-либо правил из таблицы FILTER - проверьте этот рисунок для порядка, в котором правила различных таблиц iptables применяются к пакетам.

Таким образом, вам понадобится NAT на входе и пересылка для этого NAT. Ретрансляция на выходе (если соединение было инициализировано извне при адресации ppp0: 5000) будет выполняться правилом DNAT.

iptables -A PREROUTING -t nat -i ppp0 -p tcp --dport 5000 -j DNAT --to 192.168.5.242:5000
iptables -A FORWARD -p tcp -d 192.168.5.242 --dport 5000 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Также необходимо активировать перенаправление IP как таковое; если вам это нужно только временно (до следующего выключения системы), вы можете использовать

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

Если вы хотите постоянно активировать переадресацию портов, вам необходимо изменить файл /etc/sysctl.conf, изменяя значение net.ipv4.ip_forward к 1.


Если вы также хотите использовать NAT на выходе, чтобы компьютеры в вашей частной сети могли подключаться к внешнему миру, вы можете использовать

iptables -t nat -A POSTROUTING -j MASQUERADE -o ppp0

Примечание: для этого вам не нужно правило переадресации.


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

iptables -t [table] -S

для неструктурированного представления правил [table] (FILTER NAT MANGLE - это таблицы iptables; если вы хотите FILTER, вам не нужно -t FILTER поскольку FILTER - это таблица по умолчанию, которую оценивают все вызовы iptables), или

iptables -t [table] -L

для просмотра правил разбивается на цепочки таблицы.


Проверить страницы руководства для ДЕЙСТВИТЕЛЬНО детального просмотра iptables - принесите много времени, если хотите глубже :)

Прежде всего, разрешив только NEW подключений не хватает. Итак, вы должны использовать такое правило:

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Возможно, вам потребуется включить маршрутизацию IPv4. Значение /proc/sys/net/ipv4/ip_forward должно быть 1. Попробуйте использовать echo 1 > /proc/sys/net/ipv4/ip_forward как суперпользователь.