一尘不染

如何使OpenVPN与Docker配合使用

docker

我最近安装了隐私vpn,事实证明启用的openvpn会破坏docker。

当我尝试运行时,出现docker-compose up以下错误

ERROR: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network

禁用vpn可以解决此问题(但是我宁愿不禁用它)。有什么办法可以使这两者和平共处?我使用debian jessie,并且我的openvpn具有以下版本字符串

 OpenVPN 2.3.4 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Jun 26 2017

很多人通过禁用openvpn来“解决”此问题,因此我专门询问如何使这两个工具同时工作。

如果这有什么不同,我的vpn提供程序是:https :
//www.ovpn.com/,这里是(有些编辑)配置文件:

client
dev tun

proto udp

remote host port
remote-random

mute-replay-warnings
replay-window 256

push "dhcp-option DNS 46.227.67.134"    
push "dhcp-option DNS 192.165.9.158"

remote-cert-tls server
cipher aes-256-cbc
pull

nobind
reneg-sec 432000
resolv-retry infinite

comp-lzo
verb 1

persist-key
persist-tun
auth-user-pass /etc/openvpn/credentials
ca ovpn-ca.crt
tls-auth ovpn-tls.key 1

阅读 1979

收藏
2020-06-17

共1个答案

一尘不染

解决方案(TL; DR;)

创建/etc/openvpn/fix-routes.sh具有以下内容的脚本:

#!/bin/sh

echo "Adding default route to $route_vpn_gateway with /0 mask..."
ip route add default via $route_vpn_gateway

echo "Removing /1 routes..."
ip route del 0.0.0.0/1 via $route_vpn_gateway
ip route del 128.0.0.0/1 via $route_vpn_gateway

将可执行位添加到文件:chmod o+x /etc/openvpn/fix-routes.sh。将此文件的所有者更改为root :chown root:root /etc/openvpn/fix-routes.sh

通过以下两行将其添加到您的配置中:

 script-security 2
 route-up  /etc/openvpn/fix-routes.sh

说明

Openvpn添加了以下网络的路由:0.0.0.0/1128.0.0.0/1(这些路由覆盖整个IP范围),而docker无法找到IP地址范围来创建自己的专用网络。

您需要添加默认路由(通过openvpn路由所有路由)并禁用这两个特定路由。fix-routes脚本可以做到这一点。

openvpn添加自己的路由后,将调用此脚本。要执行脚本,您需要设置script-security2允许从openvpn上下文执行bash脚本。

谢谢

我要感谢github上此评论的作者,也感谢ovpn的支持

2020-06-17