Не могу разобраться с iptables и правилами маршрутизации. Суть примерно такая : Есть комп подключенный к интернет (по VPN устройство ppp0) имеет внешний IP 217.144.190.144 С другой строны подключен к локальной сети с IP 192.168.18.1 через устройство vmnet1. В этой локальной сети стоит HTTP сервер с адресом 192.168.18.162 Соответственно на настроен DNAT. Правила iptables выглядят следующим образом.
# Generated by iptables-save v1.4.3.1 on Thu Jul 16 02:13:08 2009 *mangle :PREROUTING ACCEPT [12761:1833017] :INPUT ACCEPT [7148:1244232] :FORWARD ACCEPT [146:54997] :OUTPUT ACCEPT [6743:526128] :POSTROUTING ACCEPT [6889:581125] -A FORWARD -j LOG --log-prefix " MANGLE FORWARD " COMMIT # Completed on Thu Jul 16 02:13:08 2009 # Generated by iptables-save v1.4.3.1 on Thu Jul 16 02:13:08 2009 *filter :INPUT ACCEPT [20677:3825546] :FORWARD ACCEPT [146:54997] :OUTPUT ACCEPT [16974:1334126] -A FORWARD -j LOG --log-prefix " FILTER FORWARD " COMMIT # Completed on Thu Jul 16 02:13:08 2009 # Generated by iptables-save v1.4.3.1 on Thu Jul 16 02:13:08 2009 *nat :PREROUTING ACCEPT [19052:1891076] :POSTROUTING ACCEPT [1126:68946] :OUTPUT ACCEPT [1120:68658] -A PREROUTING -i ppp31 -j LOG --log-prefix " NAT PREROUTING " -A PREROUTING -d 217.144.190.130/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.18.162:8080 COMMIT # Completed on Thu Jul 16 02:13:08 2009
Когда пытаешься зайти на сервер все работает отлично! Вот лог от такой сессии.
Jul 16 01:59:22 indigo klogd: NAT PREROUTING IN=ppp0 OUT= MAC= SRC=213.87.76.147 DST=217.144.190.144 LEN=48 TOS=0x00 PREC=0x00 TTL=118 ID=620 DF PROTO=TCP SPT=36521 DPT=80 WINDOW=32768 RES=0x00 SYN URGP=0 Jul 16 01:59:22 indigo klogd: MANGLE FORWARD IN=ppp0 OUT=vmnet1 SRC=213.87.76.147 DST=192.168.18.162 LEN=48 TOS=0x00 PREC=0x00 TTL=117 ID=620 DF PROTO=TCP SPT=36521 DPT=8080 WINDOW=32768 RES=0x00 SYN URGP=0 Jul 16 01:59:22 indigo klogd: MANGLE FORWARD IN=ppp0 OUT=vmnet1 SRC=213.87.76.147 DST=192.168.18.162 LEN=48 TOS=0x00 PREC=0x00 TTL=117 ID=620 DF PROTO=TCP SPT=36521 DPT=8080 WINDOW=32768 RES=0x00 SYN URGP=0 Jul 16 01:59:22 indigo klogd: FILTER FORWARD IN=ppp0 OUT=vmnet1 SRC=213.87.76.147 DST=192.168.18.162 LEN=48 TOS=0x00 PREC=0x00 TTL=117 ID=620 DF PROTO=TCP SPT=36521 DPT=8080 WINDOW=32768 RES=0x00 SYN URGP=0
Входящий пакте как ему и положено проходит NAT.PREROUTING->MANGLE.FORWARD->FILTER.FORWARD Но! Если удаляешь маршрут по умолчанию в инет через ppp0. То лог становить вот таким!
Jul 16 02:04:21 indigo klogd: NAT PREROUTING IN=ppp0 OUT= MAC= SRC=213.87.76.147 DST=217.144.190.144 LEN=48 TOS=0x00 PREC=0x00 TTL=118 ID=646 DF PROTO=TCP SPT=37857 DPT=80 WINDOW=32768 RES=0x00 SYN URGP=0 Jul 16 02:04:21 indigo klogd: martian source 192.168.18.162 from 213.87.76.147, on dev ppp0 Jul 16 02:04:21 indigo klogd: ll header: 45:00:00:30 Jul 16 02:04:24 indigo klogd: NAT PREROUTING IN=ppp0 OUT= MAC= SRC=213.87.76.147 DST=217.144.190.144 LEN=48 TOS=0x00 PREC=0x00 TTL=118 ID=647 DF PROTO=TCP SPT=37857 DPT=80 WINDOW=32768 RES=0x00 SYN URGP=0 Jul 16 02:04:24 indigo klogd: martian source 192.168.18.162 from 213.87.76.147, on dev ppp0 Jul 16 02:04:24 indigo klogd: ll header: 45:00:00:30 Jul 16 02:04:30 indigo klogd: NAT PREROUTING IN=ppp0 OUT= MAC= SRC=213.87.76.147 DST=217.144.190.144 LEN=48 TOS=0x00 PREC=0x00 TTL=118 ID=648 DF PROTO=TCP SPT=37857 DPT=80 WINDOW=32768 RES=0x00 SYN URGP=0 Jul 16 02:04:30 indigo klogd: martian source 192.168.18.162 from 213.87.76.147, on dev ppp0 Jul 16 02:04:30 indigo klogd: ll header: 45:00:00:30
Да, я понимаю, что работать не должно потому что с внутреннего хоста 192.168.18,162 нет маршрута в инет! Но почему входящий пакет. Первый пакет перестал попадать в цепочки FORWARD??? Маршрут в сеть 192.168.18.* определен! Как вообще логика работы iptables связана с маршрутизацией???? И что значить «martian source 192.168.18.162 from 213.87.76.147, on dev ppp0» почему 192.168.18.162 это источник? Это же назначение?
Кто ни будь может объяснить столь странное поведение iptables?