Docker

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

  • March 20, 2020

我有一個 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
 leftid=hbogert@acme.com
 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 網路。

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

我在ServerFault中對類似問題的回答中發現:

它應該通過為容器提供 CAP_NET_ADMIN 功能來工作(請參閱在雲平台上執行 strongSwan)。

這意味著將--cap-add=NET_ADMIN標誌與 docker 或cap_add: - NET_ADMINdocker-compose 一起使用。

這假設 strongswan 也具有此功能(預設情況下似乎具有此功能)。

引用自:https://unix.stackexchange.com/questions/544725