如何配置OpenVPN客户端路由器

我正在尝试设置一个OpenVPN路由器,以便我可以在Ubuntu 12.10上连接我的平板电脑(无线)和蓝光机(有线)到另一个国家的付费VPN服务。我已经成功使用DD-WRT(太慢)和虚拟的PFSense实例(太有限)完成了这个操作。

我对Linux还不太熟悉,但是我在这个项目中已经完成了90%。硬件是两个有线以太网口,其中一个连接到传统的家用路由器,还有一个无线网卡。

到目前为止,我已经...

  1. 设置我的无线网卡作为真正的主要访问点,使用hostapd
  2. 创建一个桥接(我认为)在无线和本地局域网之间
  3. 设置了一个DHCP服务器,成功为桥接分配地址 - 无线和有线都能获取到地址
  4. 设置了OpenVPN,以便在启动时成功创建隧道连接

当前行为是将我Ubuntu机器上的所有流量路由到VPN服务器。其他设备没有任何连接性,这就是问题所在。

我的问题/目标是:

如何配置路由以使OpenVPN仅通过VPN隧道传输桥接设备(位于192.168.10.x下的设备)的流量,而不是来自实际Ubuntu计算机的流量?

OpenVPN会自动设置一些路由,但它似乎忽略了我设置的桥接。

我已经阅读了很多有关iptables和route的文档,但对我来说几乎没有意义。尽管有多个教程,我仍然不知道如何阅读“route”命令的结果。我还怀疑这可以通过OpenVPN配置文件中的“route-noexec”和“route-up”来完成,但都没有成功。

我对配置文件和设置所在位置的了解有限。上述任务花费了我至少30个小时的摸索,所以请轻一点:)

谢谢!

编辑

我在下面发布了一个指导桥接流量的解决方案,但它不能阻止Ubuntu计算机上的流量通过VPN。

2个回答

我不确定这是否理想,但至少它能够工作。在一个完美的世界中,Ubuntu计算机上的流量不会通过VPN路由,只有连接到Ubuntu计算机的设备才会走VPN。无论如何,下面是解决方案。
在 "openvpn.conf" 文件中
script-security 2
up "/path/to/external/script.sh"

在位于 /path/to/external/script.sh 的文件中
iptables -A FORWARD -o tun0 -i br0 -s 192.168.10.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

在上面,tun0是由OpenVPN创建的隧道,br0是我本地无线和本地局域网之间的桥接器,192.168.10.0/24是我本地局域网的子网/DHCP池。
我不知道那个脚本具体做什么,但我从一些关于Internet连接共享的网站上拼凑起来的。
我将保留这个答案未勾选,以防有人想提供更好的答案或解释如何阻止Ubuntu计算机上的流量通过VPN。

更容易配置路由器本身连接到VPN服务器,这样你网络上的所有设备都会通过它进行连接。 你可以通过路由器的软件Web界面来完成这个操作。
为了让连接到你的电脑的设备能够访问互联网,你需要从该电脑共享互联网给其他设备使用。

是的,更容易。但我已经做过了,速度太慢了。 - jbrookover