修复 OpenVPN tun0 接口的路由和 iptables,并选择安全路由

修复 OpenVPN tun0 接口的路由和 iptables,并选择安全路由

我确实将路由器设置为使用第三方 VPN,以实现最大安全性。由于我使用的 ISP 已阻止所有已知的 VPN 协议,包括 OpenVPN 协议,因此我不得不将路由器配置为使用 http 代理,这样 OpenVPN 就可以隐藏其指纹,不被审查 ISP 防火墙发现。

也就是说,我确实使用第三方商业 VPN 并使用他们的 OpenVPN tcp 配置文件,
以便让我连接的设备可以不受限制地使用互联网。

由于 OpenVPN 客户端需要 http 代理才能连接到其服务器,因此我首先在路由器上设置 http 代理,然后将 OpenVPN 客户端连接到互联网。

请注意,http-proxy 和 OpenVPN 客户端都在相同的OpenWRT路由器,独立的设备!

这就是说,由于许多商业 VPN 提供商在其 OpenVPN 服务器上在客户端建立连接后将其路由和网关设置推送到客户端,因此包括路由器处理器在内的整个客户端 LAN 接口被迫使用客户端重定向的互联网流量,结果,在路由器上运行的代理进程应该直接从 wan 获取互联网,却被迫使用 tun0 接口互联网,几秒钟后就会失败,结果 openvpn 客户端稍后也会失败。

为了防止上述问题,我添加了无拉力命令进入客户端.ovpn文件。

请注意,由于我使用的是商业 VPN我无法访问他们的 OpenVPN 服务器!我的路由器确实使用iptables(fw3)而不是 nftables(fw4),因此 client.ovpn 文件如下所示,

`客户端 dev tun0 proto tcp 远程 XX.YY.ZZ.RR 443 nobind auth-user-pass cred.txt

persist-tun
......
http-proxy 192.168.55.1 1080 auto
http-proxy-retry
route-nopull

`

上述配置顺利连接到 OpenVPN 服务器(商业服务器),并在我的 OpenWRT 路由器设备上创建一个 tun0 接口。

我可以通过 tun0 设备跟踪一个网站,没有任何问题,

#traceroute -i tun0 www.yahoo.com
traceroute to www.yahoo.com (87.248.119.251), 30 hops max, 46 byte packets
 1  *  10.124.148.1 (10.124.148.1)  1357.499 ms  195.523 ms
 2  vlan112.as02.stk1.se.m247.ro (146.70.16.241)  199.262 ms  190.672 ms  *

也就是说,由于我没有从 OpenVPN 服务器提取任何路由和防火墙设置,所以一旦创建这个 tun0 接口,我就应该制定自己的路由和 iptables 规则。

但在进一步解释之前,我应该提到我的路由器本地 IP 地址是 192.168.55.1,并且 br-lan(lan 桥)设备从 DHCP 池地址 192.168.55.65-192.168.55.126 或更好地说 (255.255.255.192/26) 范围中获取其 IP 地址。

我的意图和目标是设置路由器执行以下操作,

[a] br-lan 上的所有设备(范围 192.168.55.65-192.168.55.126)除了路由器本身 192.168.55.1应该从 tun0 设备获取所有互联网流量,包括 ssh、dns、icmp、tcp、udp……。

[b] 出于安全原因,如果没有 tun0 接口或 tun0 接口没有响应,则除路由器之外的所有 br-lan 设备(范围 192.168.55.65-192.168.55.126)设备的互联网流量都应被阻止访问互联网,这意味着所有这些设备只有在 tun0 启动并响应时才能访问互联网,没有其他选择,例如加权路线替代路径被接受。

[c] 所有 br-lan 设备包括路由器、打印机、电脑、NAS 等应该能够在同一个子网上找到彼此并相互通信,没有任何限制。

我知道有一些 OpenVPN 命令可以插入到 client.ovpn 配置文件中,以便实现某些路由,例如,

拉动过滤器忽略“重定向网关”或者路由 192.168.55.64 255.255.255.192 但是上述命令已经锁定了我几次,我无法访问路由器网页,此外它们都没有按预期工作。

此外,我在创建 tun0 后手动执行了以下脚本,但它不允许互联网流量通过 br-lan 设备上的 tun0。

我在以下文件中创建了 ovpn 表

/etc/iproute2/rt_tables
#reserved values
#
128     prelocal
255     local
254     main
253     default
0       unspec
#
# local
#
#1      inr.ruhep
1       ovpn

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

iptables -A FORWARD -i br-lan -o tun0 -s 192.168.55.64/26 -j ACCEPT
iptables -A FORWARD -i tun0 -o br-lan -j ACCEPT

iptables -A INPUT -i tun0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

ip route add default dev tun0 table ovpn
ip route add 192.168.55.64/26 dev br-lan table ovpn

ip rule add from 192.168.55.64/26 table ovpn

我已经在 Google 上搜索了很多解决方案,但我很确定我应该将 tun0 视为一个简单的半 wan 接口。

这是我的简单路由表,无需额外的手动路由,

#route -n  
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.8.1     0.0.0.0         UG    0      0        0 phy1-sta0
10.124.148.0    0.0.0.0         255.255.254.0   U     0      0        0 tun0
192.168.8.0     0.0.0.0         255.255.255.0   U     0      0        0 phy1-sta0
192.168.55.0    0.0.0.0         255.255.255.0   U     0      0        0 br-lan

和更多

#ip route show
default via 192.168.8.1 dev phy1-sta0 proto static src 192.168.8.118
10.124.148.0/23 dev tun0 proto kernel scope link src 10.124.148.113
192.168.8.0/24 dev phy1-sta0 proto kernel scope link src 192.168.8.118
192.168.55.0/24 dev br-lan proto kernel scope link src 192.168.55.1

我将非常感激任何针对上述目标的提示或解决方案,我对路由和 iptables 很陌生。

顺便说一句,我不知道如何进行所需的配置,例如如果_tun0_up如果_tun0_down自动化在 client.ovpn 文件中自动创建和清除路由。

能够做出LAN 设备范围(br-lan)除了路由器从 VPN 提供商获取其互联网流量。

保护和阻止LAN 用户访问受限不安全互联网。 自动化创建和删除的任务路由和 iptables 规则开幕结束tun0 接口。

答案1

虽然不是完整的答案,但可能会给你指明方向。在 client.ovpn 中,我将使用以下语句指定要通过 vpn 访问哪个网络。例如:

route 10.0.0.0 255.255.255.0 vpn_gateway

由于您使用的是商业提供商,因此 tun0 设备从其池中获取 IP 地址,因此我不建议使 lan 设备可访问。大多数情况下,它是一个防火墙 IP,没有为您想要的服务打开任何端口。这是一个客户端 VPN。如果您想让您的 lan 可通过 VPN 访问,您需要一个带有您自己的 VPN 服务器的站点到站点 VPN。

相关内容