我是 Ubuntu 新手,使用大量 torrent 下载大量多媒体内容。
有没有办法在我打开 VPN 客户端时自动关闭 torrent 之类的程序?并且当我关闭 VPN 客户端时再次打开 torrent?
答案1
根据要求,这里有一个使用 cgroups 让某些进程绕过 VPN 的示例。
安装所需工具:
sudo apt-get install cgroup-lite cgroup-tools
然后在每次启动时,当我需要此功能时,我在终端 shell 中执行以下操作:
sudo su
./cgroup_setup.bash
exit
其中 cgroup_setup 包含如下内容(根据需要更改 myuser、mynetworkdevice 和 mygatewayip):
#!/bin/bash
# Define a control group named novpn with a classid of 11:11
sudo cgcreate -a $USER:$USER -t $USER:$USER -g net_cls:novpn
echo 0x00110011 > /sys/fs/cgroup/net_cls/novpn/net_cls.classid
# Change ownership so myuser can run processes bypassing the vpn
sudo chown myuser:myuser /sys/fs/cgroup/net_cls/novpn
sudo chown myuser:myuser /sys/fs/cgroup/net_cls/novpn/*
# Add mark 11 on packets of classid 0x00110011
iptables -t mangle -A OUTPUT -m cgroup --cgroup 0x00110011 -j MARK --set-mark 11
# Force the packets to exit through my interface (mynetworkdevice) with NAT
iptables -t nat -A POSTROUTING -m cgroup --cgroup 0x00110011 -o mynetworkdevice -j MASQUERADE
# Define a new "novpn" routing table
# This is persistent so it does not actually need to be done each time in script...
echo 11 novpn >> /etc/iproute2/rt_tables
# Packets with mark 11 will use novpn
ip rule add fwmark 11 table novpn
# Add a route for default gateway for novpn
ip route add default via mygatewayip table novpn
# Unset reverse path filtering for all interfaces
for i in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 > $i; done
# Create control group
cgcreate -t $USER:$USER -a $USER:$USER -g net_cls:novpn
现在您可以使用 cgexec 运行绕过 VPN 的进程,例如:
killall firefox
cgexec -g net_cls:novpn firefox
如果您在运行 VPN 的情况下正常运行 Firefox,则应该看到您的面向公众的 IP 是 VPN IP。但是使用 cgexec 绕过 VPN,您可以检查它是您的实际家庭 IP。