有没有办法配置 OpenVPN 客户端直接路由 HTTP 端口 80 和 HTTPS 端口 443 的流量(即不通过 VPN),而是通过客户端拥有的常规默认网关。所有其他流量都应通过 VPN。
我的客户端在 Windows 上运行 OpenVPN,我当前的配置如下:
client
dev tun
proto tcp
remote my-server-2 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ../keys/ca.crt
cert ../keys/client1.crt
key ../keys/client1.key
ns-cert-type server
verb 3
route-metric 1
show-net-up
dhcp-renew
dhcp-release
route-delay 0 120
hand-window 180
management localhost 13010
management-hold
management-query-passwords
management-forget-disconnect
management-signal
auth-user-pass
答案1
OpenVPN 无法过滤流量——它只是发送通过 VPN 隧道传递的 IP 数据包。您需要的功能需要由操作系统提供。操作系统需要决定是使用 OpenVPN 还是使用本地网络上的网关来路由数据包。在 Linux 上,可以使用 iptables 标记某些数据包,并使用 iproute2 选择不同的路由表来实现这一点。但据我所知,这在 Windows 上无法实现。
答案2
如果您的 OpenVPN 客户端位于您的 LAN 网关中,您可以执行以下操作。
标记传入的 http 流量iptables
(iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 0x80
。
然后专门为标记的流量创建路由表。
echo "80 http" >> /etc/iproute2/rt_tables
ip route add default 11.22.33.44 dev ethX table http
最后,根据全新的表格添加路由标记流量的规则。
ip rule add fwmark 0x80 lookup 80
您可以在 Linux 高级路由和流量控制指南中了解有关 Linux 策略路由的更多信息 -http://www.lartc.org
答案3
当您连接到 VPN 时,它会对您的路由表进行一些更改,以决定哪些流量进入 openvpn 接口以及哪些流量被发送到本地网关。
它可以通过几种方式进行配置,其中两种如下。(我认为您需要使用 Google 搜索“拆分隧道”配置以获取更多详细信息。)
1)(默认)配置是服务器向客户端推送一个以 tun 接口网关为默认路由的路由表条目,在这种情况下全部流量(包括端口 80 和 443)通过 openVPN 隧道路由。
2)我认为您想要的是配置连接时 openVPN 服务器仅将私有网络流量的路由推送到路由表,以便其他所有内容都发送到本地网关。(http、httpd、dns 保持本地)
push
通常这涉及在文件中设置指令server.conf
;
push "route 10.251.69.0 255.255.255.0"
有一个例子可以禁用“客户端的互联网流量是否应该通过 VPN 路由?”在 openvpn 网络管理面板上
您也可以根据每个客户端进行设置,但是根据评论中链接的博客文章,如果不运行一些 bash 脚本来包装它,就很难(不可能??)取消设置从服务器推送的路由。(因此,如果您可以为 中的所有客户端设置相同的设置,会更容易server.conf
)。