(предыдующую тему по nat и pppoe удалил, потому что все оказалось гораздо проще)
Проблема: не работает правило MASQ через pppoe интерфейс
Система: 5.0 Ковчег Сервер
Интерфейсы: eth/breth0 - внутренний, eth1/breth1 - Провайдер1 (обычный ethernet), eth2/breth2 - Провайдер2 (pppoe: имя созданного интерфейса ppp1).
PPPoE сконфигурирован и работает нормально. Проверялось пингами и wgetом с самого роутера.
Основные настройки NAT - через web-интерфейс. В настройках брандмауэра указан режим работы "шлюз (NAT)", внешними интерфейсами указаны ppp1 и breth1. Снаружи внутрь проброшен 80-й порт через оба интерфейса.
В общем правила такие:
[root@router ~]# iptables -L PREROUTING -t nat -v -n
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT tcp -- * * 0.0.0.0/0 212.32.211.102 tcp dpt:80 to:192.168.2.8:80
0 0 DNAT tcp -- * * 0.0.0.0/0 88.200.158.176 tcp dpt:80 to:192.168.2.8:80
[root@router ~]# iptables -L POSTROUTING -t nat -v -n
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * breth1 0.0.0.0/0 0.0.0.0/0
0 0 MASQUERADE all -- * ppp1 0.0.0.0/0 0.0.0.0/0
По очереди тестируем работу внутреннего веб-сервера. Сначала - через breth1. Сервер откликается, все хорошо (в исходящих пакетах стоит IP интерфейса breth1, то есть маскарад сработал):
[root@router ~]# tcpdump -i breth1 port 80 -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on breth1, link-type EN10MB (Ethernet), capture size 96 bytes
21:31:46.235384 IP 62.69.14.213.62658 > 192.168.2.8.http: S 2453428889:2453428889(0) win 8192 <mss 1460,nop,nop,sackOK>
21:31:46.235727 IP 212.32.211.102.http > 62.69.14.213.62658: S 3085645345:3085645345(0) ack 2453428890 win 8192 <mss 1460,nop,nop,sackOK>
21:31:46.242941 IP 62.69.14.213.62658 > 192.168.2.8.http: . ack 3085645346 win 64240
21:31:46.251982 IP 62.69.14.213.62658 > 192.168.2.8.http: P 0:488(488) ack 1 win 64240
21:31:46.252519 IP 212.32.211.102.http > 62.69.14.213.62658: FP 1:514(513) ack 489 win 64240
21:31:46.261513 IP 62.69.14.213.62658 > 192.168.2.8.http: . ack 515 win 63727
21:31:46.269614 IP 62.69.14.213.62658 > 192.168.2.8.http: F 488:488(0) ack 515 win 63727
21:31:46.269862 IP 212.32.211.102.http > 62.69.14.213.62658: . ack 490 win 64240
А вот при работе через ppp1 сервер не откликается. Смотрим tcpdump на внешнем интерфейсе и видим, что в исходящих пакетах IP адрес источника не сменился:
[root@router ~]# tcpdump -i ppp1 port 80 and host 62.69.14.213 -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ppp1, link-type LINUX_SLL (Linux cooked), capture size 96 bytes
21:54:40.092542 IP 62.69.14.213.62707 > 192.168.2.8.http: S 1070528624:1070528624(0) win 8192 <mss 1460,nop,nop,sackOK>
21:54:40.092644 IP 192.168.2.8.http > 62.69.14.213.62707: S 3958726344:3958726344(0) ack 1070528625 win 8192 <mss 1460,nop,nop,sackOK>
21:54:43.092033 IP 192.168.2.8.http > 62.69.14.213.62707: S 3958726344:3958726344(0) ack 1070528625 win 8192 <mss 1460,nop,nop,sackOK>
21:54:43.094443 IP 62.69.14.213.62707 > 192.168.2.8.http: S 1070528624:1070528624(0) win 8192 <mss 1460,nop,nop,sackOK>
21:54:45.168087 IP 192.168.2.8.http > 62.69.14.213.62705: R 3951852646:3951852646(0) win 0
21:54:49.092236 IP 192.168.2.8.http > 62.69.14.213.62707: S 3958726344:3958726344(0) ack 1070528625 win 8192 <mss 1460,nop,nop,sackOK>
21:54:49.093708 IP 62.69.14.213.62707 > 192.168.2.8.http: S 1070528624:1070528624(0) win 8192 <mss 1460,nop,nop,sackOK>
То есть маскарад не срабатывает почему-то.
Попробовал по-другому, изменив руками правило через ppp1 (ну мало ли):
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * breth1 0.0.0.0/0 0.0.0.0/0
0 0 SNAT all -- * ppp1 192.168.2.0/24 0.0.0.0/0 to:88.200.158.176
Не помогает.