vpn + snat

Jan Ptacek ptacek na esys.cz
Pondělí Prosinec 20 16:50:28 CET 2004


Pekny den,
snazim se rozchodit klasickou VPN pomoci Openswan mezi dvema pobockami:

LAN1=192.168.1.0/24----gw1----INET----gw2----192.168.10.0/24=LAN2

gw1: Debian Sarge, jadro 2.6.7-1-686, openswan 2.2.0
gw2: Debian Sarge, jadro 2.6.8-1-686, openswan 2.2.0

Tunel se vytvori, ping chodi spravne jak z vnitrku site, tak i z brany.
Problem nastal, kdyz jsem chtel vyzkouset telnet z pocitace v LAN1 (ve
vypisu oznacen jako 'linux') na pocitac v LAN2 ('qnx'). Nejlepe to asi
bude videt na vypisu z tcpdumpu z gw1.


----------------------------- eth1 (local) -----------------------------
16:00:45.125141 IP linux.33643 > qnx.telnet: S 2665779411:2665779411(0)
win 5840 <mss 1460,sackOK,timestamp 20566318 0,nop,wscale 0>

----------------------------- eth0 (inet)  -----------------------------
16:00:45.125537 IP gw1 > gw2: ESP(spi=0xe395e339,seq=0x4)

16:00:45.238159 IP gw2 > gw1: ESP(spi=0x1756ade5,seq=0x4)
16:00:45.238159 IP qnx.telnet > linux.33643: S 2012096001:2012096001(0)
ack 2665779412 win 8192 <mss 512>

----------------------------- eth1 (local) -----------------------------
16:00:45.238483 IP qnx.3 > linux.33643: S 2012096001:2012096001(0) ack
2665779412 win 8192 <mss 512>

^^^^^^
Tohle je prvni podezrely paket. Jak je mozne, ze se zdrojovy port
paketu na ceste od eth0 k eth1 zmenil z 23(telnet) na 3? A pokracujeme:

16:00:45.238616 IP linux.33643 > qnx.3: R 2665779412:2665779412(0) win 0
----------------------------- eth0 (inet)  -----------------------------
16:00:45.238759 IP gw1 > qnx: ESP(spi=0xe395e339,seq=0x5)

^^^^^
Toto je dalsi problem. Misto, aby se kryptovany paket posilal na gw2,
posila se na lokalni adresu v LAN2.


Na obou branach pouzivam iptables + SNAT:

$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -d ! 192.168.0.0/16 -j SNAT
--to $INET_IP

Protoze pouzivam nativni ipsec z jadra 2.6, kde neni k dispozici ipsecX
rozhrani, filtruju pakety takto:

$IPTABLES -t mangle -A PREROUTING -i $INET_IFACE -s $SK_IP -p esp -j MARK
--set-mark 1

$IPTABLES -A FORWARD -i $INET_IFACE -m mark --mark 1 -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -m mark --mark 1 -j ACCEPT


Pripada mi, ze zadne z techto pravidel by nemelo zpusobit vyse popsane
problemy. Napada vas neco?

Diky,
j.


Další informace o konferenci Linux