免除程序或域的 VPN 连接

免除程序或域的 VPN 连接

当我连接到 VPN 时,我的所有网络流量都会自动通过它路由。有没有办法添加例外?我不知道添加例外是否与 VPN 协议有关,但我使用的 VPN 是 OpenVPN 协议。

说到 OpenVPN,为什么它没有像 PPTP 那样在 Ubuntu 安装中默认安装?

我无法获取 IRCHighWay 服务器列表,这是我尝试通过运行 bash 脚本连接 XChat 时得到的结果:

* Looking up irc.irchighway.net
* Connecting to irc.irchighway.net (65.23.153.98) port 6667...
* Connected. Now logging in...
* You have been K-Lined.
* *** You are not welcome on this network.
* *** K-Lined for Open proxies are not allowed. (2011/02/26 01.21)
* *** Your IP is 173.0.14.9
* *** For assistance, please email [email protected] and include everything shown here.
* Closing Link: 0.0.0.0 (Open proxies are not allowed. (2011/02/26 01.21))
* Disconnected (Remote host closed socket).

IP 173.0.14.9 是由于我的 VPN 而导致的。我ip route list在运行脚本之前忘记检查了,这是运行脚本之后的 IP:

~$ ip route list
99.192.193.241 dev ppp0  proto kernel  scope link  src 173.0.14.9 
173.0.14.2 via 192.168.1.1 dev eth1  proto static 
173.0.14.2 via 192.168.1.1 dev eth1  src 192.168.1.3 
192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.3  metric 2 
169.254.0.0/16 dev eth1  scope link  metric 1000 
default dev ppp0  proto static

哦,运行脚本返回了以下输出:

~$ sudo bash irc_route.sh
Usage: inet_route [-vF] del {-host|-net} Target[/prefix] [gw Gw] [metric M] [[dev] If]
       inet_route [-vF] add {-host|-net} Target[/prefix] [gw Gw] [metric M]
                              [netmask N] [mss Mss] [window W] [irtt I]
                              [mod] [dyn] [reinstate] [[dev] If]
       inet_route [-vF] add {-host|-net} Target[/prefix] [metric M] reject
       inet_route [-FC] flush      NOT supported

连接到 VPN 后,我运行了该脚本。

答案1

创建一个文件 irc_route.sh,其中包含:

#!/bin/bash
# script to make connections to irc.irchighway.net go via DEV.
DEV=eth0 
GW=$(ip route list | sed "s/.* via \([0-9.]*\) dev $DEV.*/\1/;t;d"|head -1)
route add -host irc.irchighway.net gw $GW $DEV

将 DEV 更改为您获取互联网连接的接口(可能是 wlan0、eth1、eth0、ppp0 中的任何一个)。然后使用 运行脚本,您可以通过前后sudo bash irc_route.sh运行来检查结果。ip route list

DEV 设备上互联网流量的默认网关的 IP 存储在变量 GW 中,然后使用它通过默认 GW 而不是您拥有的 OpenVPN 连接将所有流量路由到 irc.irchighway.net 服务器。

为了使此功能适用于所有 IRCHighWay 服务器,您必须获取所有服务器的列表。

服务器列表.txt:

 irc.irchighway.net
 caliburn.pa.us.irchighway.net

脚本:

#!/bin/bash
# script to make connections to irchighway go via DEV.
DEV=eth0 
GW=$(ip route list | sed "s/.* via \([0-9.]*\) dev $DEV.*/\1/;t;d"|head -1)
cat server_list.txt| xargs -iSERVER route add -host SERVER gw $GW $DEV

有一个“更简单”的解决方案,您可以标记端口并据此进行路由,请参阅iproute2 教程 但我没有用过。如果你不知道自己在做什么,这种路由方式就会出现一些问题。

答案2

您无法阻止特定程序通过 VPN 进行连接,但如果它们想要访问特定主机或端口号,那么这是可能的。我假设最坏的情况是您希望某些应用程序绕过防火墙。

这应该可以通过使用 SELinux 来实现,即禁止某个程序的网络连接。我不知道有什么好的工具可以进行这种配置,也不知道如何动态更改它。

我认为 iptables 中曾经有一个模块可以匹配发送程序,但是我有一段时间没见过它了。

相关内容