我刚刚使用strongswan(4.5)建立了一个vpn隧道站点到站点.隧道看起来很好并连接到另一侧,但似乎在通过隧道路由流量时出现问题.
任何的想法?
谢谢!
网络图
+----------------------------------+|Dedicated server: starfleet | +-----------------+| | | CISCO ASA | | +-------------------------| internet | || |eth0: XX.XX.XX.195/29 +-------------------| YY.YYY.YYY.155 || +-------------------------| +------+----------+| |virbr1: 192.168.100.1/24 | | | +----+--------------------| || | | | | | | +-----------------+| | | |network | | +-------+ | | || | | |172.30.20.0/27 | | | | +-----------------+| +------------------------------+ || | kvm server: enterprise | | | | | | | | | | | | eth0: 192.168.100.100/24 | | | +------------------------------+ |+----------------------------------+
软件
> debian wheezy
> strongswan 4.5.2-1.5 deb7u1
> kvm和libvirt(192.168.100.x网络)
/etc/ipsec.conf
root@starfleet ~ # cat /etc/ipsec.conf# ipsec.conf - strongSwan IPsec configuration file# basic configurationconfig setup plutodebug="all" plutostderrlog=/var/log/pluto-ipsec charonstart=no plutostart=yesconn net-net ikelifetime=86400s keylife=3600s rekeymargin=3m keyingtries=1 keyexchange=ikev1 authby=secret ike=aes256-sha-modp1024! esp=aes256-sha right=YY.YYY.YYY.155 rightsubnet=172.30.20.0/27 left=XX.XX.XX.195 leftsubnet=192.168.100.0/24 leftfirewall=yes pfs=no auto=add
Ipsec起来
root@starfleet ~ # ipsec up net-net002 "net-net" #1: initiating Main Mode102 "net-net" #1: STATE_MAIN_I1: initiate003 "net-net" #1: ignoring Vendor ID payload [FRAGMENTATION c0000000]104 "net-net" #1: STATE_MAIN_I2: sent MI2, expecting MR2003 "net-net" #1: ignoring Vendor ID payload [Cisco-Unity]003 "net-net" #1: received Vendor ID payload [XAUTH]003 "net-net" #1: ignoring Vendor ID payload [###############################]003 "net-net" #1: ignoring Vendor ID payload [Cisco VPN 3000 Series]106 "net-net" #1: STATE_MAIN_I3: sent MI3, expecting MR3002 "net-net" #1: Peer ID is ID_IPV4_ADDR: 'YY.YYY.YYY.155'002 "net-net" #1: ISAKMP SA established004 "net-net" #1: STATE_MAIN_I4: ISAKMP SA established002 "net-net" #2: initiating Quick Mode PSK+ENCRYPT+TUNNEL+UP {using isakmp#1}110 "net-net" #2: STATE_QUICK_I1: initiate002 "net-net" #2: sent QI2, IPsec SA established {ESP=>0x8a12ab22 <0xa01abba1}004 "net-net" #2: STATE_QUICK_I2: sent QI2, IPsec SA established {ESP=>0x8a12ab22 <0xa01abba1}root@starfleet ~ # ipsec status000 "net-net": 192.168.100.0/24===XX.XX.XX.195[XX.XX.XX.195]...YY.YYY.YYY.155[YY.YYY.YYY.155]===172.30.20. 0/27; erouted; eroute owner: #2000 "net-net": newest ISAKMP SA: #1; newest IPsec SA: #2; 000 000 #2: "net-net" STATE_QUICK_I2 (sent QI2, IPsec SA established); EVENT_SA_REPLACE in 3331s; newest IPSEC; eroute owner000 #2: "net-net" esp.8a12ab22@YY.YYY.YYY.155 (0 bytes) esp.a01abba1@XX.XX.XX.195 (0 bytes); tunnel000 #1: "net-net" STATE_MAIN_I4 (ISAKMP SA established); EVENT_SA_REPLACE in 86050s; newest ISAKMP000
网络信息
tun0接口由openvpn服务器使用.
virbr1接口是一个kvm网络
root@starfleet ~ # ip -4 a s1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN inet 127.0.0.1/8 scope host lo2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 inet XX.XX.XX.195/29 brd XX.XX.XX.199 scope global eth03: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100 inet 10.8.0.1 peer 10.8.0.2/32 scope global tun05: virbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP inet 192.168.100.1/24 brd 192.168.100.255 scope global virbr1 root@starfleet ~ # ip -4 r s t 0default via XX.XX.XX.193 dev eth0 10.8.0.0/16 via 10.8.0.2 dev tun0 10.8.0.2 dev tun0 proto kernel scope link src 10.8.0.1 XX.XX.XX.192/29 via XX.XX.XX.193 dev eth0 XX.XX.XX.192/29 dev eth0 proto kernel scope link src XX.XX.XX.195 192.168.100.0/24 dev virbr1 proto kernel scope link src 192.168.100.1 local 10.8.0.1 dev tun0 table local proto kernel scope host src 10.8.0.1 broadcast XX.XX.XX.192 dev eth0 table local proto kernel scope link src XX.XX.XX.195 local XX.XX.XX.195 dev eth0 table local proto kernel scope host src XX.XX.XX.195 broadcast XX.XX.XX.199 dev eth0 table local proto kernel scope link src XX.XX.XX.195 broadcast 127.0.0.0 dev lo table local proto kernel scope link src 127.0.0.1 local 127.0.0.0/8 dev lo table local proto kernel scope host src 127.0.0.1 local 127.0.0.1 dev lo table local proto kernel scope host src 127.0.0.1 broadcast 127.255.255.255 dev lo table local proto kernel scope link src 127.0.0.1 broadcast 192.168.100.0 dev virbr1 table local proto kernel scope link src 192.168.100.1 local 192.168.100.1 dev virbr1 table local proto kernel scope host src 192.168.100.1 broadcast 192.168.100.255 dev virbr1 table local proto kernel scope link srr 192.168.100.1root@starfleet ~ # ip xfrm statesrc XX.XX.XX.195 dst YY.YYY.YYY.155 proto esp spi 0x8a12ab22 reqid 16384 mode tunnel replay-window 32 flag af-unspec auth-trunc hmac(sha1) 0x######################################## 96 enc cbc(aes) 0x################################################################src YY.YYY.YYY.155 dst XX.XX.XX.195 proto esp spi 0xa01abba1 reqid 16384 mode tunnel replay-window 32 flag af-unspec auth-trunc hmac(sha1) 0x######################################## 96 enc cbc(aes) 0x################################################################root@starfleet ~ # ip xfrm policysrc 192.168.100.0/24 dst 172.30.20.0/27 dir out priority 1847 ptype main tmpl src XX.XX.XX.195 dst YY.YYY.YYY.155 proto esp reqid 16384 mode tunnel src 172.30.20.0/27 dst 192.168.100.0/24 dir fwd priority 1847 ptype main tmpl src YY.YYY.YYY.155 dst XX.XX.XX.195 proto esp reqid 16384 mode tunnel src 172.30.20.0/27 dst 192.168.100.0/24 dir in priority 1847 ptype main tmpl src YY.YYY.YYY.155 dst XX.XX.XX.195 proto esp reqid 16384 mode tunnel src ::/0 dst ::/0 socket out priority 0 ptype main src ::/0 dst ::/0 socket in priority 0 ptype main src ::/0 dst ::/0 socket out priority 0 ptype main src ::/0 dst ::/0 socket in priority 0 ptype main src 0.0.0.0/0 dst 0.0.0.0/0 socket out priority 0 ptype main src 0.0.0.0/0 dst 0.0.0.0/0 socket in priority 0 ptype main src 0.0.0.0/0 dst 0.0.0.0/0 socket out priority 0 ptype main src 0.0.0.0/0 dst 0.0.0.0/0 socket in priority 0 ptype main root@starfleet ~ # ip route show table 220root@starfleet ~ # root@starfleet ~ # route -nKernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface0.0.0.0 XX.XX.XX.193 0.0.0.0 UG 0 0 0 eth010.8.0.0 10.8.0.2 255.255.0.0 UG 0 0 0 tun010.8.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 XX.XX.XX.192 XX.XX.XX.193 255.255.255.248 UG 0 0 0 eth0 XX.XX.XX.192 0.0.0.0 255.255.255.248 U 0 0 0 eth0192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr1
iptables的
root@starfleet ~ # iptables-save # Generated by iptables-save v1.4.14 on Fri May 24 16:07:39 2013 *nat :PREROUTING ACCEPT [11:368] :INPUT ACCEPT [1:48] :OUTPUT ACCEPT [13:1012] :POSTROUTING ACCEPT [13:1012] -A POSTROUTING -s 10.8.0.0/16 ! -d 10.8.0.0/16 -o virbr1 -j MASQUERADE -A POSTROUTING -s 192.168.100.0/24 ! -d 192.168.100.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535-A POSTROUTING -s 192.168.100.0/24 ! -d 192.168.100.0/24 -p udp -j MASQUERADE --to-ports 1024-65535-A POSTROUTING -s 192.168.100.0/24 ! -d 192.168.100.0/24 -j MASQUERADECOMMIT# Completed on Fri May 24 16:07:39 2013# Generated by iptables-save v1.4.14 on Fri May 24 16:07:39 2013*mangle :PREROUTING ACCEPT [271:19504] :INPUT ACCEPT [261:19184] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [181:28686] :POSTROUTING ACCEPT [181:28686] -A POSTROUTING -o virbr1 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fillCOMMIT# Completed on Fri May 24 16:07:39 2013# Generated by iptables-save v1.4.14 on Fri May 24 16:07:39 2013*filter :INPUT ACCEPT [46:3380] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [36:5220] -A INPUT -i virbr1 -p udp -m udp --dport 53 -j ACCEPT-A INPUT -i virbr1 -p tcp -m tcp --dport 53 -j ACCEPT-A INPUT -i virbr1 -p udp -m udp --dport 67 -j ACCEPT-A INPUT -i virbr1 -p tcp -m tcp --dport 67 -j ACCEPT-A FORWARD -s 172.30.20.0/27 -d 192.168.100.0/24 -i eth0 -m policy --dir in --pol ipsec --reqid 16384 --proto esp -j ACCEPT-A FORWARD -s 192.168.100.0/24 -d 172.30.20.0/27 -o eth0 -m policy --dir out --pol ipsec --reqid 16384 --proto esp -j ACCEPT-A FORWARD -s 10.8.0.0/16 -o virbr1 -j ACCEPT -A FORWARD -i virbr1 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT-A FORWARD -d 192.168.100.0/24 -o virbr1 -m state --state RELATED,ESTABLISHED -j ACCEPT-A FORWARD -s 192.168.100.0/24 -i virbr1 -j ACCEPT -A FORWARD -i virbr1 -o virbr1 -j ACCEPT -A FORWARD -o virbr1 -j REJECT --reject-with icmp-port-unreachable-A FORWARD -i virbr1 -j REJECT --reject-with icmp-port-unreachableCOMMIT# Completed on Fri May 24 16:07:39 2013
TcpDumping从192.168.100.100到172.30.20.9
所有命令都在同一时间运行.
root@enterprise:~# ping 172.30.20.9PING 172.30.20.9 (172.30.20.9) 56(84) bytes of data. ^C --- 172.30.20.9 ping statistics ---6 packets transmitted, 0 received, 100% packet loss, time 4999ms root@enterprise:~# tcpdump -v -n dst net 172.30.20.0/27tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes16:23:48.919819 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)192.168.100.100 > 172.30.20.9: ICMP echo request, id 2605, seq 1, length 6416:23:49.918949 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)192.168.100.100 > 172.30.20.9: ICMP echo request, id 2605, seq 2, length 6416:23:50.918950 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)192.168.100.100 > 172.30.20.9: ICMP echo request, id 2605, seq 3, length 6416:23:51.918952 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)192.168.100.100 > 172.30.20.9: ICMP echo request, id 2605, seq 4, length 6416:23:52.918954 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)192.168.100.100 > 172.30.20.9: ICMP echo request, id 2605, seq 5, length 6416:23:53.918951 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)192.168.100.100 > 172.30.20.9: ICMP echo request, id 2605, seq 6, length 64root@starfleet ~ # tcpdump -v -n dst net 172.30.20.0/27tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes16:23:50.475100 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto ICMP (1), length 84) XX.XX.XX.195 > 172.30.20.9: ICMP echo request, id 2605, seq 1, length 6416:23:51.474262 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto ICMP (1), length 84) XX.XX.XX.195 > 172.30.20.9: ICMP echo request, id 2605, seq 2, length 6416:23:52.474280 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto ICMP (1), length 84) XX.XX.XX.195 > 172.30.20.9: ICMP echo request, id 2605, seq 3, length 6416:23:53.474251 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto ICMP (1), length 84) XX.XX.XX.195 > 172.30.20.9: ICMP echo request, id 2605, seq 4, length 6416:23:54.474213 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto ICMP (1), length 84) XX.XX.XX.195 > 172.30.20.9: ICMP echo request, id 2605, seq 5, length 6416:23:55.474173 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto ICMP (1), length 84) XX.XX.XX.195 > 172.30.20.9: ICMP echo request, id 2605, seq 6, length 64
starfleet上tcpdump会话的输出显示了问题.由于这里的NAT规则
-A POSTROUTING -s 192.168.100.0/24 ! -d 192.168.100.0/24 -j MASQUERADE
源地址为192.168.100.100的ICMP请求被归为xx.xx.xx.195.由于协商的IPsec策略适用于来自192.168.100.0/24而非xx.xx.xx.195的流量,因此这些数据包不会被加密.从这个schematic of the packet flow through Netfilter中可以看出,nat表中POSTROUTING链中的规则在IPsec转换的任何查找(xfrm lookup)之前应用.
要解决此问题,请执行以下操作之一:
>明确地从MASQUERADE规则中排除到目标子网的流量(!-d 172.30.20.0/27)
>在MASQUERADE规则之前添加显式豁免规则
-A POSTROUTING -s 192.168.100.0/24 -m policy --dir out --pol ipsec -j ACCEPT
>按原样保留MASQUERADE规则,但改为配置leftsubnet = xx.xx.xx.195 / 32(需要调整Cisco ASA盒上的配置,如果站点到站点隧道实际上是您的目标,则无效)
相关文章
本文链接:https://www.kinber.cn/post/574.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝: