让 openvpn 客户端通过服务器转发所有流量

让 openvpn 客户端通过服务器转发所有流量

我正在尝试设置一个 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 现已正常运行。

相关内容