我最近安装了隐私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
创建/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/1
和128.0.0.0/1
(这些路由覆盖整个IP范围),而docker无法找到IP地址范围来创建自己的专用网络。
你需要添加默认路由(通过openvpn路由所有路由)并禁用这两个特定路由。fix-routes
脚本可以做到这一点。
openvpn添加自己的路由后,将调用此脚本。要执行脚本,你需要设置script-security
为2
允许从openvpn上下文执行bash脚本。
我要感谢github上此评论的作者,也感谢ovpn的支持。
请谨慎处理此建议-如果您希望所有流量都通过VPN,则此脚本将通过您以前的(未保护的)默认路由发送您的流量。OpenVPN添加的
/1
路由比默认路由更具体。要真正完成这项工作,您需要删除route-up
脚本中的默认路由,然后将其重新添加到down
脚本中。OpenVPN通过了$route_net_gateway
,所以ip route delete default via $route_net_gateway
forroute-up
和ip route add default via $route_net_gateway
for这样的东西down
。实际上,看起来我有通过VPN的VPN(所有流量都路由到那里)。看来我的系统有多个默认路由,而OpenVPN只是第一个(因此只使用了一个)。一些流量通过其他路线(本地流量),但是在我的设置中,本地流量是我最不担心的问题。但是,您的建议将使路由表更好。不过,我绝对需要阅读有关linux网络的更多信息。
我不想通过我的VPN路由所有内容,因此我使用了:ip route通过“ $ route_vpn_gateway”添加10.8.0.0/24。这个答案是导致我找到解决方案的原因。谢谢!
@grisha能否请您解释一下对菜鸟的评论?据我从您的评论中了解到,此脚本将阻止我的流量通过我的VPN,但是当我使用traceroute时,我仍然看到这种情况。我想念什么吗?如果使用此脚本,哪种流量不会通过VPN?谢谢