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

Перенаправление портов с помощью iptables

У меня странная топология сети, и я безуспешно пытаюсь перенаправить порты.

Дело в том, что у меня есть общедоступный сервер, и все порты должны быть перенаправлены с маршрутизатора на один и тот же сервер (своего рода 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