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

Сервер за брандмауэром DMZ не отвечает

У меня есть DMZ-сервер, настроенный для переадресации определенных портов на пару машин. Предполагаемое поведение - отправить запрос в демилитаризованную зону на конкретный порт и заставить машину, которая недоступна, публично ответить данными. В этом примере я перенаправляю порт 10001 на сервер без публикации на порт 80.

Я вижу, что форвард работает, потому что я вижу, что пакеты приходят через tcpdump на сервер. По какой-то причине пакеты, которыми он отвечает, не возвращаются на мой терминал (я скручиваюсь).

iptables-save:

# Generated by iptables-save v1.4.10 on Fri Dec 23 17:36:10 2011
*nat
:PREROUTING ACCEPT [5609:332934]
:INPUT ACCEPT [5609:332934]
:OUTPUT ACCEPT [5231:376507]
:POSTROUTING ACCEPT [5248:377595]
-A PREROUTING -i eth0 -p tcp -m tcp --dport 10001 -j DNAT --to-destination 192.168.1.11:80
COMMIT
# Completed on Fri Dec 23 17:36:10 2011
# Generated by iptables-save v1.4.10 on Fri Dec 23 17:36:10 2011
*filter
:INPUT ACCEPT [119300:24294441]
:FORWARD ACCEPT [183:10688]
:OUTPUT ACCEPT [118926:28442933]
-A INPUT -i eth0 -p tcp -m state --state NEW -m tcp --dport 10001 -j ACCEPT
COMMIT
# Completed on Fri Dec 23 17:36:10 2011

Примечание: я вынул свой ip и заменил его на 10.10.10.10 Легенда:

tcpdump из DMZ:

17:44:45.039273 IP 10.10.10.10.64090 > 192.168.1.3.10001: Flags [S], seq 2710805211, win 65535, options [mss 1460,nop,wscale 3,nop,nop,TS val 1211306586 ecr 0,sackOK,eol], length 0
17:44:45.039365 IP 10.10.10.10.64090 > 192.168.1.11.www: Flags [S], seq 2710805211, win 65535, options [mss 1460,nop,wscale 3,nop,nop,TS val 1211306586 ecr 0,sackOK,eol], length 0

Судя по всему, переадресация работает.

tcpdump с непубличного сервера:

17:51:14.260134 IP 10.10.10.10.64110 > 192.168.1.11.www: Flags [S], seq 722619659, win 65535, options [mss 1460,nop,wscale 3,nop,nop,TS val 1211694763 ecr 0,sackOK,eol], length 0
17:51:14.260378 IP 192.168.1.11.www > 10.10.10.10.64110: Flags [S.], seq 3171485713, ack 722619660, win 14480, options [mss 1460,sackOK,TS val 4294937443 ecr 1211694763,nop,wscale 3], length 0
17:51:14.260470 IP 10.10.10.10.64111 > 192.168.1.11.www: Flags [S], seq 483447265, win 65535, options [mss 1460,nop,wscale 3,nop,nop,TS val 1211694763 ecr 0,sackOK,eol], length 0

Мой завиток из удаленной сети (обфусцированный IP):

$ curl -vv remote-unit:10001
* About to connect() to remote-unit port 10001 (#0)
*   Trying 99.99.99.99... Operation timed out
* couldn't connect to host
* Closing connection #0
curl: (7) couldn't connect to host

Так как вы выполняете DNAT, для ответа непубличного сервера у него должен быть маршрут (конкретный или по умолчанию) через машину, выполняющую DNAT - если маршрут асимметричный (т. Е. Ответы не выходят через машину, которая выполняется DNAT) или просто нет действительного маршрута для ответа, в результате ваш клиент не получит ответ.