LINUX.ORG.RU
ФорумAdmin

Проблемы со SNAT.


0

1

Проблема в следующем. Есть сервак, br0 (ip: 192.168.1.1) смотрит в локалку (192.168.1.0/24), eth2 (ip: 10.30.30.253) - в другую (10.30.30.0/24), tun0 - vpn-интерфейс, ppp0 - смотрит во внешку. На ppp0 для локалки 1 (br0) настроен маскарадинг, всё отлично бегает. По tun0 в FORWARD на вход и на выход - ACCEPT, по впн всё ходит отлично. Но теперь добавляю следующее:

iptables -t nat -I POSTROUTING -o eth2 -j SNAT --to-source 10.30.30.253
iptables -I FORWARD -i eth2 -j ACCEPT
iptables -I FORWARD -o eth2 -j ACCEPT
Запускаю пинг с сервака на 10.30.30.2 - пингуется. Запускаю
hping3 -1 -a 192.168.1.1 10.30.30.2
ответов на пинг не приходит, но при этом
tcpdump -i eth2 icmp
показывает что всё снатится, как и задумано, и ответы приходят на 10.30.30.253, но в листинге
watch iptables -nvxL
видно что исходящие на eth2 пакеты попадают в цепоку FORWARD, а вот ответы на заснатеные пинги попадают уже в INPUT, как будто сервер не видет что они были заснатены, и думает что пакеты действительно адрессованы ему, а не исходному айпишнику (192.168.1.1). ЧЯДНТ?


Прочитал 3 раза и нечего толком не понял...

Нарисуй структуру сети и покаж iptables -vnL и iptables -t nat -vnL

Tok ★★ ()

Не понял. 192.168.1.1 это же один из адресов сервака. Почему пакеты должны идти по FORWARD?

mky ★★★★★ ()
Ответ на: комментарий от f1st

ок, а если убрать первый, работающий на br0 маскарадинг и зарядить на eth2 интерфейсе SNAT - какой будет результат?

Вообще было бы логично предположить, что несколько SNAT-ов и маскарадов не должны конфликтовать, но в любом случае мне было бы интересно поведение системы в упрощённых условиях.

spunky ★★ ()
Ответ на: комментарий от f1st

Хорошо. А INPUT'e то что-ли DROP этих пакетов?

И как видно, что пакеты идут в INPUT? У вас там счётчик у правила:

-s 10.30.30.2 -d 10.30.30.253 -p icmp

накручивается?

результат тот же для любого айпишника из подсети 192.168.1.0/24

А ping в этом случае откуда запускается? И у сервера есть mac в arp-таблице адреса, откуда идёт ping?

mky ★★★★★ ()
Ответ на: комментарий от Tok
server:~# iptables -vnL
Chain INPUT (policy ACCEPT 19M packets, 4961M bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 117K packets, 134M bytes)
 pkts bytes target     prot opt in     out     source               destination         
 9517  799K ACCEPT     all  --  *      eth2    0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  eth2   *       0.0.0.0/0            0.0.0.0/0           
 985K   65M ACCEPT     all  --  tun+   *       0.0.0.0/0            0.0.0.0/0           
1088K  732M ACCEPT     all  --  *      tun+    0.0.0.0/0            0.0.0.0/0           
 133K   14M ACCEPT     all  --  br0    *       0.0.0.0/0            192.168.1.0/24      
    0     0 ACCEPT     all  --  br0    *       192.168.1.9         !192.168.1.0/24      
    0     0 ACCEPT     all  --  br0    *       192.168.1.10        !192.168.1.0/24      
 110K   18M ACCEPT     all  --  br0    *       192.168.1.19        !192.168.1.0/24      
51969 2297K ACCEPT     tcp  --  br0    *       192.168.1.12        !192.168.1.0/24      tcp dpt:110 
 3298 3335K ACCEPT     tcp  --  br0    *       192.168.1.12        !192.168.1.0/24      tcp dpt:25 
    0     0 ACCEPT     all  --  br0    *       192.168.1.12         19*.**9.1**.***      
10796  448K ACCEPT     tcp  --  br0    *       192.168.1.13        !192.168.1.0/24      tcp dpt:110 
  875 1067K ACCEPT     tcp  --  br0    *       192.168.1.13        !192.168.1.0/24      tcp dpt:25 
    0     0 ACCEPT     all  --  br0    *       192.168.1.13         1**.9*.1**.***       
    0     0 ACCEPT     all  --  br0    *       192.168.1.7          1**.***.**3.**       
  529  306K ACCEPT     all  --  br0    *       192.168.1.7          ***.**.**2.***       
   36  9131 ACCEPT     all  --  br0    *       192.168.1.7          ***.***.***.***        
    0     0 ACCEPT     all  --  br0    *       192.168.1.7          ***.***.***.***       
 4605  471K ACCEPT     all  --  br0    *       192.168.1.7          ***.***.***.***      
 1436 94199 ACCEPT     all  --  br0    *       192.168.1.7          ***.***.***.***       
 1760  197K ACCEPT     all  --  br0    *       192.168.1.7          ***.***.***.***        
    0     0 ACCEPT     all  --  br0    *       192.168.1.7          **.***.***.***        
    0     0 ACCEPT     all  --  br0    *       192.168.1.4          ***.***.***.***      
    0     0 ACCEPT     all  --  br0    *       192.168.1.11         ***.***.***.***      
    0     0 ACCEPT     all  --  br0    *       192.168.1.12         ***.***.***.***       
    0     0 ACCEPT     all  --  br0    *       192.168.1.12         ***.***.***.***      
11217  751K DROP       all  --  br0    *       0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 18M packets, 7037M bytes)
 pkts bytes target     prot opt in     out     source               destination  
server:~# iptables -t nat -vnL
Chain PREROUTING (policy ACCEPT 23M packets, 2238M bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 38159 packets, 3820K bytes)
 pkts bytes target     prot opt in     out     source               destination         
40664 3180K MASQUERADE  all  --  *      ppp0    0.0.0.0/0            0.0.0.0/0           
 1339  307K SNAT       all  --  *      eth2    0.0.0.0/0            0.0.0.0/0           to:10.30.30.253 

Chain OUTPUT (policy ACCEPT 49588 packets, 4868K bytes)
 pkts bytes target     prot opt in     out     source               destination 

А структура сети очень простая: есть сервер, на нём ppp0 смотрит во внешку, tun0 тоже, к br0 подключена сетка 192.168.1.0/24, к eth2 - 10.30.30.0/24.

f1st ()
Ответ на: комментарий от spunky

К сожалению пока нет возможности попробывать, людям из 192.168.1.0/24 инэт нужен постоянно. Если уберу маскарадинг - поднимется метеж:).

f1st ()
Ответ на: комментарий от mky

Нет, в INPUT default policy ACCEPT. Нет, просто когда пингуешь, видно что туда пакеты уходят по цепочке -o eth2, а возвращаются в INPUT, а не в -i eth2 (в этом правиле стабильно 0 пакетов). Да, пинг делаю с айпишников, которіе есть в arp-таблице сервера.

f1st ()
Ответ на: комментарий от f1st

А в mangle случаем ничего нет? Может rp_filter, хотя он не должен мешать. Какую запись выводит conntrack для данного потока?

mky ★★★★★ ()
Ответ на: комментарий от mky

В mangle пусто, rp_filter установлен в 0. А по поводу conntrack следующая ситуация - запускаю

server:~# hping3 -1 -a 192.168.1.17 10.30.30.1
в тоже время имеем:
server:~# tcpdump -i eth2 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth4, link-type EN10MB (Ethernet), capture size 65535 bytes
09:38:57.896450 IP 10.30.30.253 > 10.30.30.1: ICMP echo request, id 16683, seq 1, length 64
09:38:57.896993 IP 10.30.30.1 > 10.30.30.253: ICMP echo reply, id 16683, seq 1, length 64
09:38:58.891107 IP 10.30.30.253 > 10.30.30.1: ICMP echo request, id 16683, seq 2, length 64
09:38:58.891633 IP 10.30.30.1 > 10.30.30.253: ICMP echo reply, id 16683, seq 2, length 64
и
server:~# conntrack -L -s 192.168.1.17
tcp      6 431973 ESTABLISHED src=192.168.1.17 dst=192.168.1.1 sport=**** dport=*** packets=2202 bytes=420862 src=192.168.1.1 dst=192.168.1.17 sport=*** dport=**** packets=2066 bytes=402793 [ASSURED] mark=0 secmark=0 use=2
icmp     1 29 src=192.168.1.17 dst=10.30.30.1 type=8 code=0 id=11843 packets=9 bytes=252 src=10.30.30.1 dst=10.30.30.253 type=0 code=0 id=11843 packets=9 bytes=252 mark=0 secmark=0 use=2
conntrack v0.9.14 (conntrack-tools): 2 flow entries have been shown.
server:~# conntrack -L --src-nat
icmp     1 8 src=192.168.1.17 dst=10.30.30.1 type=8 code=0 id=1 packets=8 bytes=480 src=10.30.30.1 dst=10.30.30.253 type=0 code=0 id=1 packets=8 bytes=480 mark=0 secmark=0 use=2
conntrack v0.9.14 (conntrack-tools): 1 flow entries have been shown.

f1st ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.