我有一个 ipsec (strongswan) 连接可以工作,它本身工作正常,但是来自容器的流量似乎没有通过 ipsec 隧道。从最终用户的角度来看,这不是预期的,因为 ipsec 不是拆分隧道。
#ipsec.conf
config setup
conn %default
ikelifetime=28800s
keylife=12h
rekeymargin=3m
keyingtries=1
keyexchange=ikev1
conn worldstream
ike = aes256-sha1-modp1024
esp = aes256-sha1!
xauth=client
[email protected]
leftauth=psk
leftauth2=xauth
leftsourceip=%config
right=office.acme.com
rightid=%any
rightauth=psk
auto=add
rightsubnetwithin=0.0.0.0/0
我也在使用 strongswan 的bypass-lan插件。
除了其他答案中提到的 CAP_NET_ADMIN 功能之外,我还需要添加一个 iptables 规则来将来自 Docker 网络的流量 SNAT 到所需的 VPN 网络。
我在ServerFault中对类似问题的回答中发现:
它应该通过为容器提供 CAP_NET_ADMIN 功能来工作(请参阅在云平台上运行 strongSwan)。
这意味着将
--cap-add=NET_ADMIN
标志与 docker 或cap_add: - NET_ADMIN
docker-compose 一起使用。这假设 strongswan 也具有此功能(默认情况下似乎具有此功能)。