Здравствуйте!
Если кто-нибудь уже сталкивался с чем-то подобным, помогите пожалуйста разобраться в проблеме с Netfilter'ом. Имеется конфигурация с локальной сетью и одним интернет-провайдером, которая крутится на роутере Asus WL-600g (http://ru.wikipedia.org/wiki/Asus_WL-600g). Роутер подключён немного нестандартным способом: один из 4 портов LAN переконфигурирован в WAN, и к нему подключён провайдер по витой паре. Порт ADSL не задействован.
Итак, что в данный момент настроено:
- Интерфейс br0 - локальная сеть, адрес на этом интерфейсе 192.168.1.1, сюда подключены адреса 192.168.1.0/24
- Интерфейс br1 - внешняя сеть, статический IP-адрес 194.6.@@@.@@@
Таблица filter:
Code:
# iptables --list -nv
Chain INPUT (policy ACCEPT 1436 packets, 171K bytes)
pkts bytes target prot opt in out source destination
320 29810 ACCEPT all -- br1 * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
37965 6121K ACCEPT all -- br0 * 0.0.0.0/0 0.0.0.0/0
38995 35M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
Chain OUTPUT (policy ACCEPT 2542 packets, 244K bytes)
pkts bytes target prot opt in out source destination
Таблица nat:
Code:
# iptables -t nat --list -nv
Chain PREROUTING (policy ACCEPT 13M packets, 16G bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 1441 packets, 126K bytes)
pkts bytes target prot opt in out source destination
4345 243K SNAT all -- * br1 192.168.1.0/24 0.0.0.0/0 to:194.6.@@@.@@@
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Таблица mangle:
Code:
# iptables -t mangle --list -nv
Chain PREROUTING (policy ACCEPT 13M packets, 17G bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 4447 packets, 326K bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 90444 packets, 47M bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 2893 packets, 265K bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 93337 packets, 48M bytes)
pkts bytes target prot opt in out source destination
2 120 LOG icmp -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID LOG flags 4 level 4 prefix `INVALID ICMP: '
Здесь последнее правило добавлено для того, чтобы проиллюстрировать проблему.
Суть в том, что всё работает, кроме пингов из внутренней сети во внешнюю сеть. Пакеты ICMP при прохождении через conntrack почему-то получают статус INVALID. И эти пакеты НЕ ПРОХОДЯТ через таблицу nat, вообще никак.
Вот что в логе:
Code:
INVALID ICMP: IN= OUT=br1 SRC=192.168.1.12 DST=194.87.0.50 LEN=60 TOS=0x00 PREC=0x00 TTL=127 ID=26439 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=14
INVALID ICMP: IN= OUT=br1 SRC=192.168.1.12 DST=194.87.0.50 LEN=60 TOS=0x00 PREC=0x00 TTL=127 ID=26440 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=15
Видно, что NAT не работает, адрес не подменяется.
Почему так получается, я совершенно не понимаю. Уже даже начинаю подозревать, что это какой-то глюк в прошивке от Asus'а. Но при этом явно тут что-то не так с настройками. При стандартном способе подключения по ADSL пинги из внутренней во внешнюю сеть проходят нормально. Но ADSL мне не нужно, и я его не подключал. В чём может быть причина? Почему проблема только с протоколом ICMP? (а TCP и UDP из внутренней во внешнюю сеть прекрасно работают) Может быть, не загружен какой-то модуль? Но насчёт модулей я проверял, - вроде бы всё, что должно быть, находится на своём месте. Вот список:
Code:
# lsmod | sort
Module Size Used by
adsldd 114448 0 - Live 0xc0053000
atmapi 48176 2 adsldd,blaadd, Live 0xc001e000
bcm_enet 17680 0 - Live 0xc002b000
bcm_usb 15792 0 - Live 0xc0031000
bcmprocfs 12288 0 - Live 0xc000f000
blaadd 5808 0 - Live 0xc000c000
ehci_hcd 25936 0 - Live 0xc004b000
ip_conntrack 24992 16 ip_nat_pt,ip_nat_ipsec,ip_conntrack_pt,ip_conntrack_ipsec,ipt_state,ipt_layer7,ipt_REDIRECT,ipt_MASQUERADE,iptable_nat,ip_conntrack_tftp,ip_conntrack_rtsp,ip_conntrack_pptp,ip_conntrack_irc,ip_conntrack_h323,ip_conntrack_gre,ip_conntrack_ftp, Live 0xc00ad000
ip_conntrack_ftp 20608 0 - Live 0xc00a6000
ip_conntrack_gre 2000 1 ip_conntrack_pptp, Live 0xc0008000
ip_conntrack_h323 2320 0 - Live 0xc00c3000
ip_conntrack_ipsec 30672 0 - Live 0xc0176000
ip_conntrack_irc 68896 0 - Live 0xc00c5000
ip_conntrack_pptp 2416 0 - Live 0xc00d7000
ip_conntrack_pt 110560 1 ip_nat_pt, Live 0xc017f000
ip_conntrack_rtsp 73056 0 - Live 0xc013f000
ip_conntrack_tftp 1824 0 - Live 0xc00d9000
ip_nat_ipsec 44816 0 - Live 0xc019b000
ip_nat_pt 103648 0 - Live 0xc01a7000
ip_tables 14144 15 ipt_tcpmss,ipt_state,ipt_mark,ipt_limit,ipt_length,ipt_layer7,ipt_REDIRECT,ipt_MASQUERADE,ipt_TCPMSS,ipt_MARK,ipt_LOG,ipt_FTOS,iptable_nat,iptable_mangle,iptable_filter, Live 0xc0152000
ipt_FTOS 992 0 - Live 0xc015b000
ipt_LOG 4064 1 - Live 0xc00e4000
ipt_MARK 704 0 - Live 0xc015f000
ipt_MASQUERADE 1568 0 - Live 0xc0164000
ipt_REDIRECT 768 0 - Live 0xc0166000
ipt_TCPMSS 2304 0 - Live 0xc015d000
ipt_layer7 9360 0 - Live 0xc016e000
ipt_length 448 0 - Live 0xc0168000
ipt_limit 896 0 - Live 0xc016a000
ipt_mark 416 0 - Live 0xc016c000
ipt_state 544 3 - Live 0xc0172000
ipt_tcpmss 896 0 - Live 0xc0174000
iptable_filter 928 1 - Live 0xc00db000
iptable_mangle 992 1 - Live 0xc00a4000
iptable_nat 15248 5 ip_nat_pt,ip_nat_ipsec,ipt_REDIRECT,ipt_MASQUERADE, Live 0xc00df000
ov511 68592 0 - Live 0xc008e000
pwc 44576 0 - Live 0xc0036000
scsi_mod 91296 2 usb_storage,sd_mod, Live 0xc0070000
sd_mod 15744 2 - Live 0xc0088000
uhci_hcd 27344 0 - Live 0xc0043000
usb_storage 49792 1 - Live 0xc00b5000
usblp 12656 0 - Live 0xc0019000
wl 360064 0 - Live 0xc00e6000
Вот уже третий день не могу понять, в чём причина, почему ICMP-пакеты не NAT'ятся. Может быть, у кого-нибудь есть какие-то идеи?