TCPDUMP moon# tcpdump -i eth0 not port ssh and not port domain and not arp > /tmp/tcpdump.log 2>&1 & PRE-TEST alice# /etc/init.d/iptables start 2> /dev/null * Starting firewall ... [ ok ] venus# /etc/init.d/iptables start 2> /dev/null * Starting firewall ... [ ok ] sun# /etc/init.d/iptables start 2> /dev/null * Starting firewall ... [ ok ] moon# echo 1 > /proc/sys/net/ipv4/ip_forward moon# iptables -t nat -A POSTROUTING -o eth0 -s 10.1.0.0/16 -p udp -j SNAT --to-source 192.168.0.1:1024-1100 moon# iptables -t nat -A POSTROUTING -o eth0 -s 10.1.0.0/16 -p tcp -j SNAT --to-source 192.168.0.1:2000-2100 alice# ipsec start Starting strongSwan IPsec 2.8.8 [starter]... venus# ipsec start Starting strongSwan IPsec 2.8.8 [starter]... sun# ipsec start Starting strongSwan IPsec 2.8.8 [starter]... alice# sleep 5 alice# ipsec up nat-t 002 "nat-t" #1: initiating Main Mode 104 "nat-t" #1: STATE_MAIN_I1: initiate 003 "nat-t" #1: ignoring Vendor ID payload [strongSwan 2.8.8] 003 "nat-t" #1: received Vendor ID payload [XAUTH] 003 "nat-t" #1: received Vendor ID payload [Dead Peer Detection] 003 "nat-t" #1: received Vendor ID payload [RFC 3947] 002 "nat-t" #1: enabling possible NAT-traversal with method 3 106 "nat-t" #1: STATE_MAIN_I2: sent MI2, expecting MR2 003 "nat-t" #1: NAT-Traversal: Result using RFC 3947: i am NATed 002 "nat-t" #1: we have a cert and are sending it 108 "nat-t" #1: STATE_MAIN_I3: sent MI3, expecting MR3 002 "nat-t" #1: Peer ID is ID_FQDN: '@sun.strongswan.org' 002 "nat-t" #1: crl not found 002 "nat-t" #1: certificate status unknown 002 "nat-t" #1: ISAKMP SA established 004 "nat-t" #1: STATE_MAIN_I4: ISAKMP SA established 002 "nat-t" #2: initiating Quick Mode RSASIG+ENCRYPT+TUNNEL+PFS+UP {using isakmp#1} 112 "nat-t" #2: STATE_QUICK_I1: initiate 002 "nat-t" #2: sent QI2, IPsec SA established {ESP=>0xff38ad89 <0x45180ca2 NATOA=0.0.0.0} 004 "nat-t" #2: STATE_QUICK_I2: sent QI2, IPsec SA established {ESP=>0xff38ad89 <0x45180ca2 NATOA=0.0.0.0} venus# sleep 5 venus# ipsec up nat-t 002 "nat-t" #1: initiating Main Mode 104 "nat-t" #1: STATE_MAIN_I1: initiate 003 "nat-t" #1: ignoring Vendor ID payload [strongSwan 2.8.8] 003 "nat-t" #1: received Vendor ID payload [XAUTH] 003 "nat-t" #1: received Vendor ID payload [Dead Peer Detection] 003 "nat-t" #1: received Vendor ID payload [RFC 3947] 002 "nat-t" #1: enabling possible NAT-traversal with method 3 106 "nat-t" #1: STATE_MAIN_I2: sent MI2, expecting MR2 003 "nat-t" #1: NAT-Traversal: Result using RFC 3947: i am NATed 002 "nat-t" #1: we have a cert and are sending it 108 "nat-t" #1: STATE_MAIN_I3: sent MI3, expecting MR3 002 "nat-t" #1: Peer ID is ID_FQDN: '@sun.strongswan.org' 002 "nat-t" #1: crl not found 002 "nat-t" #1: certificate status unknown 002 "nat-t" #1: ISAKMP SA established 004 "nat-t" #1: STATE_MAIN_I4: ISAKMP SA established 002 "nat-t" #2: initiating Quick Mode RSASIG+ENCRYPT+TUNNEL+PFS+UP {using isakmp#1} 112 "nat-t" #2: STATE_QUICK_I1: initiate 002 "nat-t" #2: sent QI2, IPsec SA established {ESP=>0x2a74e8cf <0xbed5f936 NATOA=0.0.0.0} 004 "nat-t" #2: STATE_QUICK_I2: sent QI2, IPsec SA established {ESP=>0x2a74e8cf <0xbed5f936 NATOA=0.0.0.0} TEST alice# ipsec status | grep 'nat-t.*STATE_QUICK_I2.*IPsec SA established' [YES] 000 #2: "nat-t" STATE_QUICK_I2 (sent QI2, IPsec SA established); EVENT_SA_REPLACE in 869s; newest IPSEC; eroute owner venus# ipsec status | grep 'nat-t.*STATE_QUICK_I2.*IPsec SA established' [YES] 000 #2: "nat-t" STATE_QUICK_I2 (sent QI2, IPsec SA established); EVENT_SA_REPLACE in 852s; newest IPSEC; eroute owner sun# ipsec status | grep 'nat-t.*STATE_QUICK_R2.*IPsec SA established' [YES] 000 #2: "nat-t"[2] 192.168.0.1:1025 STATE_QUICK_R2 (IPsec SA established); EVENT_SA_REPLACE in 1101s; newest IPSEC; eroute owner 000 #4: "nat-t"[4] 192.168.0.1:1026 STATE_QUICK_R2 (IPsec SA established); EVENT_SA_REPLACE in 1109s; newest IPSEC; eroute owner sun# ipsec status | grep 'nat-t.*alice@strongswan.org' [YES] 000 "nat-t"[2]: 10.2.0.0/16===192.168.0.2:4500[@sun.strongswan.org]...192.168.0.1:1025[alice@strongswan.org]===10.1.0.10/32; erouted; eroute owner: #2 sun# ipsec status | grep 'nat-t.*@venus.strongswan.org' [YES] 000 "nat-t"[4]: 10.2.0.0/16===192.168.0.2:4500[@sun.strongswan.org]...192.168.0.1:1026[@venus.strongswan.org]===10.1.0.20/32; erouted; eroute owner: #4 alice# ping -c 1 10.2.0.10 | grep '64 bytes from 10.2.0.10: icmp_seq=1' [YES] 64 bytes from 10.2.0.10: icmp_seq=1 ttl=63 time=1.03 ms venus# ping -c 1 10.2.0.10 | grep '64 bytes from 10.2.0.10: icmp_seq=1' [YES] 64 bytes from 10.2.0.10: icmp_seq=1 ttl=63 time=0.635 ms moon# killall tcpdump moon# cat /tmp/tcpdump.log | grep 'IP moon.strongswan.org.* > sun.strongswan.org.ipsec-nat-t: UDP' [YES] 12:25:06.563145 IP moon.strongswan.org.1025 > sun.strongswan.org.ipsec-nat-t: UDP-encap: ESP(spi=0xff38ad89,seq=0x1), length 116 12:25:06.702197 IP moon.strongswan.org.1026 > sun.strongswan.org.ipsec-nat-t: UDP-encap: ESP(spi=0x2a74e8cf,seq=0x1), length 116 moon# cat /tmp/tcpdump.log | grep 'IP sun.strongswan.org.ipsec-nat-t > moon.strongswan.org.*: UDP' [YES] 12:25:06.563574 IP sun.strongswan.org.ipsec-nat-t > moon.strongswan.org.1025: UDP-encap: ESP(spi=0x45180ca2,seq=0x1), length 116 12:25:06.702608 IP sun.strongswan.org.ipsec-nat-t > moon.strongswan.org.1026: UDP-encap: ESP(spi=0xbed5f936,seq=0x1), length 116 POST-TEST alice# iptables -v -n -L Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 1 84 ACCEPT all -- eth0 * 10.2.0.0/16 10.1.0.10 policy match dir in pol ipsec reqid 16385 proto 50 2 508 ACCEPT udp -- eth0 * 0.0.0.0/0 0.0.0.0/0 udp spt:500 dpt:500 3 1920 ACCEPT udp -- eth0 * 0.0.0.0/0 0.0.0.0/0 udp spt:4500 dpt:4500 4 1003 ACCEPT tcp -- eth0 * 192.168.0.150 0.0.0.0/0 tcp spt:80 209 29788 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy DROP 1 packets, 164 bytes) pkts bytes target prot opt in out source destination 1 84 ACCEPT all -- * eth0 10.1.0.10 10.2.0.0/16 policy match dir out pol ipsec reqid 16385 proto 50 2 676 ACCEPT udp -- * eth0 0.0.0.0/0 0.0.0.0/0 udp spt:500 dpt:500 4 2060 ACCEPT udp -- * eth0 0.0.0.0/0 0.0.0.0/0 udp spt:4500 dpt:4500 6 391 ACCEPT tcp -- * eth0 0.0.0.0/0 192.168.0.150 tcp dpt:80 219 46164 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spt:22 venus# iptables -v -n -L Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 1 84 ACCEPT all -- eth0 * 10.2.0.0/16 10.1.0.20 policy match dir in pol ipsec reqid 16385 proto 50 2 508 ACCEPT udp -- eth0 * 0.0.0.0/0 0.0.0.0/0 udp spt:500 dpt:500 3 1920 ACCEPT udp -- eth0 * 0.0.0.0/0 0.0.0.0/0 udp spt:4500 dpt:4500 4 1003 ACCEPT tcp -- eth0 * 192.168.0.150 0.0.0.0/0 tcp spt:80 211 29904 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy DROP 1 packets, 116 bytes) pkts bytes target prot opt in out source destination 1 84 ACCEPT all -- * eth0 10.1.0.20 10.2.0.0/16 policy match dir out pol ipsec reqid 16385 proto 50 2 676 ACCEPT udp -- * eth0 0.0.0.0/0 0.0.0.0/0 udp spt:500 dpt:500 4 2044 ACCEPT udp -- * eth0 0.0.0.0/0 0.0.0.0/0 udp spt:4500 dpt:4500 6 391 ACCEPT tcp -- * eth0 0.0.0.0/0 192.168.0.150 tcp dpt:80 216 42488 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spt:22 sun# iptables -v -n -L Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT esp -- eth0 * 0.0.0.0/0 0.0.0.0/0 4 1352 ACCEPT udp -- eth0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:500 8 4104 ACCEPT udp -- eth0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:4500 4 1003 ACCEPT tcp -- eth0 * 192.168.0.150 0.0.0.0/0 tcp spt:80 176 26224 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 1 84 ACCEPT all -- eth0 * 10.1.0.20 10.2.0.0/16 policy match dir in pol ipsec reqid 16409 proto 50 1 84 ACCEPT all -- * eth0 10.2.0.0/16 10.1.0.20 policy match dir out pol ipsec reqid 16409 proto 50 1 84 ACCEPT all -- eth0 * 10.1.0.10 10.2.0.0/16 policy match dir in pol ipsec reqid 16401 proto 50 1 84 ACCEPT all -- * eth0 10.2.0.0/16 10.1.0.10 policy match dir out pol ipsec reqid 16401 proto 50 Chain OUTPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT esp -- * eth0 0.0.0.0/0 0.0.0.0/0 4 1016 ACCEPT udp -- * eth0 0.0.0.0/0 0.0.0.0/0 udp spt:500 6 3840 ACCEPT udp -- * eth0 0.0.0.0/0 0.0.0.0/0 udp spt:4500 6 391 ACCEPT tcp -- * eth0 0.0.0.0/0 192.168.0.150 tcp dpt:80 193 52744 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spt:22 sun# ipsec stop Stopping strongSwan IPsec... alice# ipsec stop Stopping strongSwan IPsec... venus# ipsec stop Stopping strongSwan IPsec... alice# /etc/init.d/iptables stop 2> /dev/null * Stopping firewall ... [ ok ] venus# /etc/init.d/iptables stop 2> /dev/null * Stopping firewall ... [ ok ] sun# /etc/init.d/iptables stop 2> /dev/null * Stopping firewall ... [ ok ] moon# iptables -t nat -F