我正在努力使用 Tomato 设置我的家庭网络,以便与两个 Wi-Fi SSID 配合使用。我的路由器是双频 NETGEAR NIGHTHAWK 路由器,到目前为止,Tomato 和 VPN 功能都运行良好。唯一的缺点是,当 VPN 处于活动状态时(当您选择通过 Tomato 界面启动时),它会将 VPN 隧道应用于我设置的两个 SSID。有没有办法只将 VPN 应用于其中一个 SSID?这样,通过更改我的无线网络,我就可以脱离路由器上运行的 VPN 隧道。
这可能吗?
答案1
我最近在家庭网络上的 Tomato (shibby) v138 上实现了类似的东西。以下是图表:
在进入 VPN 设置之前,我最初将 2.4GHz 和 5GHz 网络都放在同一个 SSID 上,我们称之为“公共”。内部网络将设备分配给 192.168.1.2-254 范围内的地址。这就是您在图表上半部分看到的内容。
这些是我为添加通过 VPN 路由的新子网所做的更改:
- 在下面基本/网络/LAN,我添加了一个名为“br1”的新网桥。我给它的 IP 地址为 192.168.2.1,网络掩码为 255.255.255.0,启用 DHCP,IP 范围为 192.168。2.2-254。
- 在下面高级/虚拟无线,我添加了两个新的虚拟无线接口,wl0.1 和 wl1.1,分别用于 2.4GHz 和 5GHz 接口。两者都分配给新网桥“LAN1 (br1)”。我为它们提供了相同的新 SSID,例如“private”。如果您愿意,您还可以为它们提供与公网不同的密码。
- 在下面VPN 隧道/OpenVPN 客户端/基本版,我配置了 VPN 客户端(我的 VPN 提供商是 Private Internet Access,所以我遵循本指南)。我还启用了“从 WAN 启动”,这样它就会自动启动。
- 在下面VPN 隧道/OpenVPN 客户端/高级,我设置了“忽略重定向网关”选项,这样客户端就不会将所有内容路由到 VPN。
- 在下面VPN 隧道/OpenVPN 客户端/路由策略,我选中了“通过 VPN 重定向”,并添加了一行类型为“来自源 IP”且值为“192.168.2.0/24”的行,以便新子网上的所有主机都通过 VPN 进行路由。
此时,我可以启动 VPN 客户端,然后拿起无线设备,连接到“私人”网络并确认我的面向互联网的 IP 位于 VPN 后面,然后连接到“公共”并流式播放 Netflix/Amazon Prime 视频而不会出现地理限制错误。
现在,您可以根据需要将每台设备设置为连接到任一 SSID。在我们家,向电视机提供 Netflix 流媒体的媒体流保持在公共网络上。我的手机和笔记本电脑连接到专用网络。在大多数情况下,您应该选择其中一个——您不希望设备随意自动连接到任何一个。
可选附加功能
连接网络:如果您希望物理以太网端口通过 VPN 进行连接,则可以在高级/VLAN并将其分配给新网桥 (br1)。此时,您可以根据需要将路由器上的一个或多个物理以太网端口移动到安全 VLAN。我没有这样做,因此只有无线客户端才能加入我的私有子网。
内部路由:按照上述步骤操作后,您可能会发现公网和私网的客户端无法互相通信。按照我上面的做法设置 VPN 客户端的路由策略会添加以下规则:
iptables -t mangle -A PREROUTING -s 192.168.2.0/24 -j MARK --set-mark 311
到 tomato 的防火墙脚本。这会标记来自 192.168.2.0/24 网络的每个数据包,并且带有标记 311 的所有内容都会通过 VPN 路由。这意味着“公共”子网 (192.168.1.0/24) 上的任何设备都无法通过内部网络与“私有”子网上的设备通信,因为尽管请求可以通过,但响应会被转移到 VPN 并丢失。就我而言,我希望能够从私有网络上的服务器访问文件共享,因此我决定清除应发送到公共网络的任何内容的标记。我通过添加以下行来实现此目的:
iptables -t mangle -A PREROUTING -s 192.168.2.0/24 -d 192.168.1.0/24 -j MARK --set-mark 0
到管理/脚本/防火墙。您可以为想要从私有网络转发到路由器的任何端口添加类似的规则。
故障安全:也称为“终止开关”,我添加了一些额外的规则管理/脚本/防火墙其目的是防止任何来自专用网络的信息进入不受保护的 WAN(vlan2)。这意味着如果 VPN 因某种原因中断,连接到专用网络的客户端将无法意外地通过不受保护的 WAN 接口进行通信。
iptables -I FORWARD -s 192.168.2.0/24 -o vlan2 -m state --state NEW -j REJECT --reject-with icmp-host-prohibited
iptables -I FORWARD -p tcp -s 192.168.2.0/24 -o vlan2 -m state --state NEW -j REJECT --reject-with tcp-reset