OpenVPN:通过 VPN 路由所有客户端流量 - 非 Windows 客户端是否需要一些额外的服务器端脚本?

OpenVPN:通过 VPN 路由所有客户端流量 - 非 Windows 客户端是否需要一些额外的服务器端脚本?

注意:我是网络新手,所以请假设我什么都不知道并相应地解释事情(或提供更多信息的链接)。

我正在尝试设置一个 OpenVPN 服务器,以便所有客户端流量(包括网络流量)都通过 VPN 路由。我正在遵循 OpenVPN HOWTO,并且已经到了“通过 VPN 路由所有客户端流量(包括网络流量)”部分 (https://openvpn.net/index.php/open-source/documentation/howto.html#redirect)。

我的设置是:

  • OpenVPN 服务器(私有网络 IP 10.240.233.2 上的 BeagleBone Black (BBB))连接到我家里的宽带路由器(私有网络 IP 10.240.233.1 上)。

  • 连接到外部网络的客户端(运行 Xubuntu GNU/Linux 的笔记本电脑)。

我可以成功:

  • 在 BBB 上启动 OpenVPN 服务器

  • 将客户端连接到 VPN

  • 从客户端 (10.8.0.6) Ping OpenVPN 服务器 (10.8.0.1) 并反之亦然

  • 从客户端 ping 路由器 (10.240.233.1)

后者是通过以下方式实现的:

  • 将以下指令添加到服务器配置文件:push "route 10.240.233.0 255.255.255.0"

  • 通过编辑在 OpenVPN 服务器上启用 IP 转发/etc/sysctl.conf(这是编辑:# Uncomment the next line to enable packet forwarding for IPv4 net.ipv4.ip_forward=1,之后命令sudo sysctl net.ipv4.ip_forward产生net.ipv4.ip_forward = 1

  • 使用以下命令启用 tun 转发(来自本指南:https://nikinuryadin.wordpress.com/2010/04/16/step-by-step-setting-up-openvpn-in-debian-with-routing-tun-connection/):sudo iptables -A INPUT -i tun+ -j ACCEPTsudo iptables -A FORWARD -i tun+ -j ACCEPT

现在对于重定向位...

我在服务器配置文件中添加了以下指令(来自 OpenVPN HOWTO):

push "redirect-gateway def1"
push "dhcp-option DNS 10.240.233.1"

注意:推送的 DNS IP 是我的宽带路由器的 IP,连接到 VPN 时我可以从客户端成功 ping 通该 IP,并且服务器将其报告为其名称服务器(cat /etc/resolv.conf在服务器上产生nameserver 10.240.233.1

然后我使用以下命令将 VPN 客户端流量 NAT 到互联网(来自 OpenVPN HOWTO):

sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

(是的,服务器报告我从 OpenVPN 服务器到宽带路由器的连接为eth0(使用ifconfig))

最后,我执行了以下命令来保存 iptables 并重新启动 VPN(来自上面链接的 Niki Nuryadin):

sudo iptables-save
sudo /etc/init.d/networking restart
sudo /etc/init.d/openvpn restart

我可以从 OpenVPN 服务器成功 ping 通 www.google.com 和 www.bbc.co.uk。(当然,在未连接到 VPN 时,我也可以从笔记本电脑 ping 通它们!)但是,连接到 VPN 后,我无法从客户端 ping 通这些网站。

通常情况下,如果你尝试 ping 某个不可用的东西(例如ping 192.168.7.2),你会得到如下结果:

PING 192.168.7.2 (192.168.7.2) 56(84) bytes of data.

然后它就挂了。但是,在这种情况下,当客户端连接到 OpenVPN 服务器并且我尝试 ping Google 或 BBC 时,我根本没有得到任何输出。

我在 serverfault.com 或其他地方都找不到答案。我唯一的线索是 OpenVPN HOWTO 说:

[使用 `push "dhcp-option DNS 10.240.233.1"] 将配置 Windows 客户端(或非 Windows 客户端使用一些额外的服务器端脚本) 使用 [10.240.233.1] 作为其 DNS 服务器。

那么,我是否需要一些额外的服务器端脚本?或者还有其他问题?

另外,一旦我可以 ping 网站并浏览互联网,我该如何检查所有流量确实经过 OpenVPN 隧道而不是像我采取这些步骤之前那样绕过它?

答案1

后来我找到了答案。这是 HOWTO 中的拼写错误。额外的脚本在客户侧面,而不是服务器边。

只需将以下内容添加到客户文件:

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

要检查所有流量是否都通过隧道,请使用traceroute,例如

traceroute google.com

输出显示数据包到达目的地所采用的路由。您应该在 traceroute 输出中看到 VPN 网关(在我的情况下是我家里的宽带路由器)。

非常感谢 OpenVPN 社区论坛提供的帮助:http://forums.openvpn.net/viewtopic.php?f=4&t=23249&p=67315&sid=f2657d061da760b5af60aec18dcea81e#p67315

相关内容