我国的网络审查制度日益严格。显而易见的解决方案是使用 VPN,但它会降低连接速度,而且无法保证公共 VPN 服务的安全性。
因此我想到了以下解决方案:
路由器将以常规方式访问大多数网站,但会保持一个恒定的 VPN 连接,该连接将充当一个额外的网络接口。如果我访问其中一个受审查的网站,路由器将通过这个虚拟接口传递流量。
使用 RouterOS 可以实现这一点吗?如何实现?
我的路由器是 RB2011UiAS-2HnD-IN,RouterOS v 6.30.2。
答案1
我们假设您将使用 PPTP VPN,只是为了演示您需要运行的命令。
由于 PPTP 的加密早已被破解,我建议您使用更安全的东西(如 OpenVPN)。无论您使用哪种 VPN/隧道技术,原理都是相同的。
因此,首先创建 VPN,而不添加默认网关路由。
/interface pptp-client
add add-default-route=no allow=pap,chap,mschap1,mschap2 connect-to=VPN_SERVER_IP \
dial-on-demand=no disabled=no max-mru=1440 max-mtu=1440 mrru=dis \
name=VPN_NAME password="MY_STRONG_PASSWORD" profile=default-encryption user=USERNAME
然后,通过 VPN 添加带有新路由标记的默认网关来创建新的路由表vpn
。这将允许您通过 VPN 路由数据包。
/ip route add dst-address=0.0.0.0/0 distance=1 gateway=VPN_GATEWAY_IP routing-mark=vpn
如果您想在 VPN 中断时阻止传出流量,则下一个路由是可选的:
/ip route add dst-address=0.0.0.0/0 type=unreachable distance=2 routing-mark=vpn
我们还需要对通过 VPN 接口离开的数据包进行一些 NAT。
/ip firewall nat add chain=srcnat out-interface=VPN_NAME action=masquerade
现在我们添加与mangle
我们想要的目标 IP 匹配的规则并对mark-routing
它们执行操作,以便它们使用vpn
我们创建的路由表。
/ip firewall mangle add chain=prerouting dst-address-list=VPN action=mark-routing new-routing-mark=vpn
最后,我们Address List
在防火墙上创建一个,其中包含我们想要通过 VPN 路由的 IP。
/ip firewall address-list add list=VPN address=1.1.1.1
/ip firewall address-list add list=VPN address=2.2.2.2
/ip firewall address-list add list=VPN address=3.3.3.3
/ip firewall address-list add list=VPN address=4.4.4.4
对于您想要通过 VPN 路由的 IP,您可以根据需要多次重复最后一条规则。
请记住,上述规则不提供任何安全性,例如谁在您的路由器后面可以访问 VPN 等。您可能需要在规则中添加适当的源 IP 检查,以使它们更安全。
此方法还将通过 VPN 路由整个 IP。如果您需要通过 VPN 路由特定端口/协议,只需创建符合您需要的附加 mangle 规则并mark-routing
对其执行操作即可。
答案2
以下是通用的 Linux 答案。我不知道 Routeros 的 UI 中是否有合适的功能,如果没有,您是否可以绕过 UI 并直接与内核中的路由/防火墙/nat 功能进行交互。
首先要做的是设置你的 VPN 软件并打开 VPN 界面。你应该告诉你的 VPN 软件不是将 VPN 设为默认网关。具体如何操作取决于您使用的 VPN 软件。
然后,您可以向路由表添加特定路由,以将流量引导至 VPN 中的特定 IP 地址。
您还需要确保 NAT 配置正确,以便离开路由器的数据包的源地址与它们发出的接口相匹配。这可以通过使用“MASQURADE”目标或为每个接口设置单独的“SNAT”规则来实现。
根据阻止的具体性质,您可能会发现有必要将部分或全部 DNS 流量发送到 VPN。将所有 DNS 流量发送到 VPN 应该很容易(只需将您的 DNS 服务器设置指向路由到 VPN 的 IP)。如果(出于性能或隐私原因)您只希望部分 DNS 查询发送到 VPN,则需要某种 DNS 代理来拆分请求。
如果您访问的网站没有稳定的 IP,情况会更加复杂。在这种情况下,您需要一个可以监控回复并动态添加路由的 DNS 代理。