当我连接到 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 中曾经有一个模块可以匹配发送程序,但是我有一段时间没见过它了。