通过 IPSec 路由 (docker) 容器流量

通过 IPSec 路由 (docker) 容器流量

我有一个 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 的插件。

答案1

除了 CAP_NET_ADMIN 功能之外其他答案我需要添加一条 iptables 规则来对从 Docker 网络到所需 VPN 网络的流量进行 SNAT。

iptables -j SNAT -t nat -I POSTROUTING 1 -o ${OUT_INTERFACE} -d ${VPN_NETWORK} -s ${DOCKER_NETWORK} --to-source ${VPN_HOST_IP}

我发现在这个答案ServerFault 中的类似问题:

答案2

它应该通过为容器提供 CAP_NET_ADMIN 功能来工作(请参阅在云平台上运行strongSwan)。

这意味着将--cap-add=NET_ADMIN标志与 docker 或cap_add: - NET_ADMINdocker-compose 一起使用。

这假设strongswan也具有此功能(似乎默认情况下具有此功能)。

相关内容