Strongswan vpn tunnel เชื่อมต่อ แต่ทราฟฟิกไม่ถูกส่งผ่าน


15

ฉันเพิ่งตั้งค่า vpn tunnel site-to-site พร้อม strongswan (4.5) อุโมงค์ดูดีและเชื่อมต่อกับด้านอื่น ๆ แต่ดูเหมือนว่ามีปัญหาการรับส่งข้อมูลเส้นทางผ่านอุโมงค์

ความคิดใด ๆ

ขอบคุณ!

แผนภาพเครือข่าย

+----------------------------------+
|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     | |
| +------------------------------+ |
+----------------------------------+

ซอฟต์แวร์

  • เดซี่ส่งเสียงดังเอี๊ยด
  • 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 configuration

config setup
    plutodebug="all"
    plutostderrlog=/var/log/pluto-ipsec
    charonstart=no
    plutostart=yes

conn 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 up

root@starfleet ~ # ipsec up net-net
002 "net-net" #1: initiating Main Mode
102 "net-net" #1: STATE_MAIN_I1: initiate
003 "net-net" #1: ignoring Vendor ID payload [FRAGMENTATION c0000000]
104 "net-net" #1: STATE_MAIN_I2: sent MI2, expecting MR2
003 "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 MR3
002 "net-net" #1: Peer ID is ID_IPV4_ADDR: 'YY.YYY.YYY.155'
002 "net-net" #1: ISAKMP SA established
004 "net-net" #1: STATE_MAIN_I4: ISAKMP SA established
002 "net-net" #2: initiating Quick Mode PSK+ENCRYPT+TUNNEL+UP {using isakmp#1}
110 "net-net" #2: STATE_QUICK_I1: initiate
002 "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 status
000 "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: #2
000 "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 owner
000 #2: "net-net" esp.8a12ab22@YY.YYY.YYY.155 (0 bytes) esp.a01abba1@XX.XX.XX.195 (0 bytes); tunnel
000 #1: "net-net" STATE_MAIN_I4 (ISAKMP SA established); EVENT_SA_REPLACE in 86050s; newest ISAKMP
000 

ข้อมูลเครือข่าย

อินเตอร์เฟสtun0ถูกใช้โดยเซิร์ฟเวอร์ openvpn

อินเตอร์เฟซvirbr1เป็นเครือข่าย kvm

root@starfleet ~ # ip -4 a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    inet 127.0.0.1/8 scope host lo
2: 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 eth0
3: 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 tun0
5: 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 0
default 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.1

root@starfleet ~ # ip xfrm state
src 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 policy
src 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 220
root@starfleet ~ # 

root@starfleet ~ # route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         XX.XX.XX.193    0.0.0.0         UG    0      0        0 eth0
10.8.0.0        10.8.0.2        255.255.0.0     UG    0      0        0 tun0
10.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 eth0
192.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 MASQUERADE
COMMIT
# 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-fill
COMMIT
# 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-unreachable
COMMIT
# Completed on Fri May 24 16:07:39 2013

TcpDumping จาก 192.168.100.100 ถึง 172.30.20.9

คำสั่งทั้งหมดกำลังทำงานในเวลาเดียวกัน

root@enterprise:~# ping 172.30.20.9
PING 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/27
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
16: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 64
16: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 64
16: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 64
16: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 64
16: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 64
16: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 64

root@starfleet ~ # tcpdump -v -n dst net 172.30.20.0/27
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
16: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 64
16: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 64
16: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 64
16: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 64
16: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 64
16: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

คำตอบ:


10

ผลลัพธ์ของtcpdumpเซสชั่นบนstarfleetเผยปัญหา เนื่องจากกฎ NAT ที่นี่

-A POSTROUTING -s 192.168.100.0/24 ! -d 192.168.100.0/24 -j MASQUERADE

คำขอ ICMP กับแหล่งที่อยู่192.168.100.100ได้รับ natted xx.xx.xx.195ไป เนื่องจากนโยบาย IPsec ที่เจรจาต่อรองนั้นมีไว้สำหรับการรับส่งข้อมูล192.168.100.0/24และไม่ใช่xx.xx.xx.195แพ็กเก็ตเหล่านี้จะไม่ได้รับการเข้ารหัส ดังที่เห็นได้ในแผนผังของการไหลของแพ็กเก็ตผ่าน Netfilterกฎใน POSTROUTING chain ในตาราง nat จะถูกนำไปใช้ก่อนการค้นหาใด ๆ สำหรับการแปลง IPsec (การค้นหา xfrm )

ในการแก้ไขปัญหาให้เลือกทำอย่างใดอย่างหนึ่งต่อไปนี้:

  • ยกเว้นทราฟฟิกไปยังซับเน็ตเป้าหมายอย่างชัดเจนจากกฎ 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 และไม่ช่วยถ้าอุโมงค์ไซต์ต่อไซต์นั้นเป็นเป้าหมายของคุณจริง ๆ )


ขอบคุณสำหรับคำตอบของคุณ ฉันลองคำแนะนำทั้งสามข้อทีละข้อแล้วใช้ไม่ได้ ฉันได้ดาวน์อินเทอร์เฟซทั้งหมดยกเว้น eth0 (ฉันได้ทำความสะอาด iptables ด้วย) และฉันได้ใช้คำแนะนำที่ 3 และปริมาณการใช้งานไม่ถูกกำหนดเส้นทาง ความคิดใด ๆ
telemaco

ในที่สุดการกำหนดค่า leftsubnet = xx.xx.xx.195 / 32 และการกำหนดค่าตามขวางบางอย่างในด้าน cisco asa นั้นใช้งานได้! :) ขอบคุณ
telemaco

2

สถานการณ์ของฉันคล้ายกับสถานการณ์ที่ @telemaco อธิบายไว้มาก ฉันมีการทดสอบ VM ทำงานบน KVM บนคอมพิวเตอร์แล็ปท็อปของฉัน แล็ปท็อปของฉันได้รับที่อยู่ IP ผ่าน DHCP จึง VPN ปลายทางที่อยู่ IP ได้รับมอบหมายจาก Strongswan leftsourceip=%configแล็ปท็อปของฉันผ่านทาง

192.168.100.0/24เวชวลแมชชีนใช้เครือข่ายส่วนตัว แล็ปท็อปของฉัน (โฮสต์ KVM) รับที่อยู่ IP 192.168.50.2/24ผ่าน DHCP และที่อยู่ IP ปลายทาง10.0.0.10/26จาก Strongswan

VMs ควรเข้าถึงเครือข่าย192.168.0.0/24ซึ่งถูกส่งผ่าน VPN

จากคำตอบของ @ecdsa ฉันได้รับสิ่งนี้โดยเพิ่มกฎต่อไปนี้:

-t nat -I POSTROUTING -s 192.168.100.0/24 -d 192.168.0.0/24 -j SNAT --to-source 10.0.0.10

ในกรณีของฉันip xfrm policyดูเหมือนว่านี้ (แยก):

src 192.168.0.0/24 dst 10.0.0.10/32 
    dir fwd priority 2851 
    tmpl src xx.xx.xx.xx dst 192.168.50.2
        proto esp reqid 5 mode tunnel
src 192.168.0.0/24 dst 10.0.0.10/32 
    dir in priority 2851 
    tmpl src xx.xx.xx.xx dst 192.168.50.2
        proto esp reqid 5 mode tunnel
src 10.0.0.10/32 dst 192.168.0.0/24 
    dir out priority 2851 
    tmpl src 192.168.50.2 dst xx.xx.xx.xx
        proto esp reqid 5 mode tunnel

นั่นหมายถึงเฉพาะที่อยู่ IP ในเครื่องเท่านั้นที่10.0.0.10มีxfrm lookupกฎที่เกี่ยวข้อง นั่นเป็นเหตุผลว่าทำไมจึงจำเป็นต้องใช้ NAT เว้นแต่มีเพิ่มเครือข่ายย่อยของ VM ใน IPsec

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.