在 OpenWRT 固件上使用 OpenVPN 时,我无法让流量通过 VPN 隧道路由。
路由器是WRT3200ACM,连接到Ubuntu上的OpenVPN服务器。
OpenVPN 客户端正在连接,我可以从路由器上的 SSH 控制台 ping 远程网络上的 IP。但是,当 OpenVPN 连接建立时,网络上的所有连接客户端都与互联网断开连接。
OpenVPN 客户端配置当前如下所示:
dev tun
proto udp
remote x.x.x.x 1194
cipher AES-256-CBC
auth SHA1
resolv-retry infinite
nobind
persist-key
persist-tun
client
redirect-gateway def1
verb 3
<ca>
-----BEGIN CERTIFICATE-----
REMOVED
-----END CERTIFICATE-----
</ca>
key-direction 1
<tls-auth>
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
REMOVED
-----END OpenVPN Static key V1-----
</tls-auth>
<cert>
-----BEGIN CERTIFICATE-----
REMOVED
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
REMOVED
-----END PRIVATE KEY-----
</key>
此配置在 Windows 和 MacOS 客户端上运行良好,并且流量被正确路由,但只要我将其连接到 Linksys WRT3200ACM 路由器上,事情就会出错。
我也在路由器上使用 dd-wrt 固件进行过测试,但问题是一样的,但是在使用 dd-wrt 时无法 ping 远程 ip,因此 OpenWRT 解决方案效果稍好一些。
本地网络配置为:
Network: 192.168.237.0
Subnet: 255.255.255.0
GW: 192.168.237.1
远程网络配置为:
Network: 192.168.37.0
Subnet: 255.255.255.0
GW: 192.168.37.1
OpenVPN虚拟网络配置为:
Network: 10.8.0.0
Subnet: 255.255.255.0
GW: 10.8.0.1
IP-range: 10.8.0.6-10
OpenVPN server: 10.8.0.5
答案1
我认为在您的情况下这是一个路由问题。您声明配置在您的客户端上运行良好 - 因此您的客户端获得范围内的 IP 地址10.8.0.6-10/24
并通过 Ubuntu 路由所有流量。此处的发送 IP 是一个10.8.0.x
IP。此外,连接时,ping 适用于本地路由器的 SSH,但不适用于客户端。如果您希望所有客户端通过 OpenVPN 隧道连接到互联网,则发送 IP 地址是192.168.237.0
- 因此是您的本地网络。Ubuntu 服务器默认对该网络一无所知。您有两个选择:
- 在你的 ubuntu 机器上添加一个静态路由,该网络
192.168.237.0/24
可以通过路由器的 IP 访问10.8.0.x
。然后你必须确保路由器始终获得相同的 IP 地址 - 添加路由协议 - 例如 RIP2。您可以通过在 openwrt 和 ubuntu 上安装
quagga-zebra
和轻松启用此quagga-ripd
功能。然后您不必关心 OpenVPN 中路由器的动态 IP。
如果 Ubuntu 服务器不直接访问互联网并执行 NAT,则您必须进一步将路由分发到下一个设备/防火墙,以使其能够返回到您的客户端。通过 RIP 或通过静态路由。您可能还必须调整 NAT 语句。