strongswan虚拟ip和动态路由

问题描述:

在Linux上,我一直在搞ipsec(Strongswan)和动态路由(OSPF/RIP)。 在Ubuntu服务器上,我有一堆连接到虚拟交换机的以太网接口。其中每一个都运行OSPF来获得外部路由:在这种情况下,只是到一个ipsec端点的路由。我想运行这个远程安全设备到Ubuntu服务器的ipsec。问题是我需要OSPF动态选择将其路由到哪个接口。不幸的是,ipsec不能以这种方式神奇地得到它的左/右IP。 相反,我将附加一个新的IP到环回(或任何地方),并将IPsec传递给这个IP。它会尝试和失败,让我有以下错误:strongswan虚拟ip和动态路由

#grep charon /var/log/messages 
...<trimmed> 
Aug 18 22:04:59 system charon: 10[IKE] retransmit 4 of request with message ID 0 
Aug 18 22:04:59 system charon: 10[NET] sending packet: from 10.1.2.3[500] to 10.1.1.1[500] (1196 bytes) 
Aug 18 22:04:59 system charon: 02[NET] error writing to socket: Operation not permitted 
... 

所以,如果我用以太网IP,它是注定要失败的时候动态路由变化。如果我使用虚拟IP,它会尝试并且无法发送任何内容。

问题:如何使用Strongswan动态路由?

这里有一些CONFIGS ...

# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 
    inet 127.0.0.1/8 scope host lo 
     valid_lft forever preferred_lft forever 
    inet 10.1.2.3/32 scope global lo 
     valid_lft forever preferred_lft forever 
    inet6 ::1/128 scope host 
     valid_lft forever preferred_lft forever 
2: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000 
...<trimmed> 
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 
... 
    inet 192.168.1.1/24 ... 
... 
6: eth4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 
... 
    inet 192.168.4.1/24 

# cat /etc/quagga/Quagga.conf

...<trimmed> 
interface eth1 
ip address 192.168.1.1/24 
ip ospf network point-to-point 
ipv6 nd suppress-ra 
! 
interface eth2 
ip address 192.168.2.1/24 
ip ospf network point-to-point 
ipv6 nd suppress-ra 
! 
interface eth3 
ip address 192.168.3.1/24 
ip ospf network point-to-point 
ipv6 nd suppress-ra 
! 
interface eth4 
ip address 192.168.4.1/24 
ip ospf network point-to-point 
ipv6 nd suppress-ra 
! 
interface lo 
! 
router ospf 
network 192.168.1.1/24 area 0.0.0.0 
network 192.168.2.1/24 area 0.0.0.0 
network 192.168.3.1/24 area 0.0.0.0 
network 192.168.4.1/24 area 0.0.0.0 
! 
ip forwarding 
! 
line vty 
! 

# cat /etc/ipsec.conf

conn tuntun0 
     leftid=10.1.2.3 
     left=%10.1.2.3 
     leftfirewall=no 
     leftsourceip=10.1.2.3 
     leftsubnet=10.1.2.3/32[gre] 
     right=10.1.1.1 
     rightsubnet=10.1.1.1/32[gre] 
     auto=route 
     ike=aes256-sha1-modp3072 
     esp=aes256-sha1! 

编辑 我误解为IP /路由问题的错误。它实际上部分是路由问题,部分是防火墙问题;一旦我明白,就很容易修复

为Strongswan记录错误“error writing to socket: Operation not permitted”是从防火墙不明确允许从新的虚拟/回送IP地址的流量最简单的解释。确保添加一些防火墙规则,如:

iptables -I OUTPUT -o eth+ -s $NEW_LO_IP -d $DESTINATION_IP -j ACCEPT 
iptables -I INPUT -i eth+ -d $NEW_LO_IP -s $DESTINATION_IP -j ACCEPT 

......在这种情况下,与10.1.2.3$DESTINATION_IP10.1.1.1更换$NEW_LO_IP ...

虽然不能与此特定错误参与,这也有助于增加你回IP动态路由,比如增加这Quagga.conf

network 10.1.2.3 area 0.0.0.0 

它还有助于确保出站连接被强制时outbo使用新的IP和以太网。否则,它将不匹配您的IPSec隧道的流量选择器(并且只会尝试泄漏以太网)。 这可以在某些连接应用程序中配置,或者如果您选择添加接口以在IPSec内通信,请使用/etc/network/interfaces中的local选项对其进行配置。有关详细信息,请运行man interfaces

这些设置特定于Ubuntu/Debian。如果你使用RedHat变种,事情可能会有所不同。