У меня странная топология сети, и я безуспешно пытаюсь перенаправить порты.
Дело в том, что у меня есть общедоступный сервер, и все порты должны быть перенаправлены с маршрутизатора на один и тот же сервер (своего рода DMZ).
Моя топология:
internet
|
router
|
/----+--+------\
| | |
pc1 server etc
На сервере работает linux (ubuntu) с iptables
. Брандмауэр настроен примерно так:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
# for every port I accept on the server (this part works perfectly)
iptables -A INPUT -p tcp --dport xxxx -j ACCEPT
# for every port I want to forward to pc1 (this is the part that doesn't work)
iptables -A FORWARD -p tcp --dport xxxx -j ACCEPT
iptables -t nat -P PREROUTING -p tcp --dport xxxx -j DNAT --to $PC1_IP
# I've also tried with the following line:
iptables -t nat -P POSTROUTING -p tcp --sport xxxx -j SNAT --to $PC1_IP
но пересылка, похоже, не работает.
Когда я включаю пересылку, соединения могут подключаться (или кажется, что могут), но данные не передаются. Возможно, они просто истекли.
Когда я не включаю указанную переадресацию, в соединениях немедленно отказывается.
Целевой компьютер проверен и может принимать соединения.
Я также пробовал немного понюхать с помощью Wireshark на обеих машинах. На сервере пакет принят, но исходящий пакет не найден (я предполагаю, что он должен быть, если перенаправление DNAT действительно произошло). На pc1
, пакет не получен.
Кто-нибудь может предложить исправление? Я гуглил несколько дней и пробовал несколько настроек для этого порта - ни один из них не работал.
попробуйте добавить
echo 1 > /proc/sys/net/ipv4/ip_forward
включить маршрутизацию в Linux
Добавить
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
в противном случае ответы с локальных компьютеров не будут отправлены обратно в Интернет.
также вы можете использовать:
iptables -t nat -P PREROUTING -p tcp --dport xxxx -d your.public.ip.addr -j DNAT --to $PC1_IP
если вы соблюдаете свое правило - любой трафик, отправленный на порт xxxx из локальной сети, будет перенаправлен на $ PC1_IP