我正在尝试设置一个 openvpn 服务器和客户端,所有客户端流量都通过服务器路由。我目前能够通过客户端访问服务器,但是当我在服务器上启用“push "redirect-gateway def1"”时,客户端将失去连接到互联网、vpn 或其他设备的所有能力。此外,它无法再连接到服务器,尽管局域网连接仍然正常。我的服务器配置文件是:
local ***.***
port 1194
proto tcp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway local def1"
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3
这是客户端:
client
dev tun
proto tcp
remote ***.*** 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert laptop.crt
key laptop.key
ns-cert-type server
comp-lzo
verb 3
在服务器上,我启用了 ip 转发并通过 iptables 启用了路由:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
但客户端仍然无法连接到 VPN 或互联网上的任何东西。
答案1
作为参考,HOWTO 的相关部分是这里,尽管我怀疑你已经理解了这一点。
我首先尝试的是删除“本地”,也就是说命令应该是
push "redirect-gateway def1"
并不是
push "redirect-gateway local def1"
仅当所有客户端都位于同一子网时,本地标志才有效。
另外需要注意的几件事是 DNS 流量通过 vpn 路由,因此除非您已处理好这一点,否则您将无法解析地址。DHCP 也可以转发,虽然在您的情况下似乎不应该发生这种情况,因为您使用的是路由 VPN 而不是桥接 VPN,但无论如何可能值得检查。
答案2
如果您正在将新网关“推送”到客户端,那么您还需要推送一些路由,特别是到该网关所在子网的路由。这样您就可以通过 VPN 访问互联网。如果网关所在的网络与 VPN 服务器所在的网络不同,那么您还需要额外的路由,以便客户端可以访问这些其他网络。此外,您可能还希望将 DNS 服务器推送到客户端,因为否则客户端无法解析它现在连接到的网络上的任何目标的名称。
以下是我们的 OpenVPN 服务器配置文件的摘录:
# 将路由推送到客户端以将其绑定到我们的本地 # 虚拟端点。 # 推“路由 10.180.0.1 255.255.255.255” # 推送客户端需要进入的任何路线 # 到本地网络。 # 推“路由 10.171.0.0 255.255.0.0” 推“路由 10.172.0.0 255.255.0.0” 推“路由 10.173.0.0 255.255.0.0” 推“路由 10.174.0.0 255.255.0.0” 推“路由 10.175.0.0 255.255.0.0” 推“路由 10.176.0.0 255.255.0.0” 推“路由 10.177.0.0 255.255.0.0” 推“路由 10.181.0.0 255.255.0.0” 推“路由 10.182.0.0 255.255.0.0” 推“路由 192.168.61.0 255.255.255.0” # 将 DHCP 选项推送到 Windows 客户端。 # 推送“dhcp-option DOMAIN our-internal-domain.com” 推“dhcp-选项 DNS 10.abc” 推“dhcp-选项 WINS 10.bcd”
这些都是内部网络,我们甚至没有推送新的网关(因为我们的大多数用户都是从远处连接,所以他们最好通过他们的默认网关访问互联网,我们也不是控制狂)。
答案3
实际上,问题在于 NAT 设置不正确。已修复,vpn 现已正常运行。