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_IP
与10.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变种,事情可能会有所不同。