这是NOOBS(使用debian)的完整“操作指南”,以确保debian-transmission用户组(即传输)仅通过vpn路由数据
不要基于复杂的系统脚本对VPN使用更长的“操作方法” ...! iptables是最好的(也是万无一失的)方法!!!-使用基于传输用户和组的几个IPTABLE规则来控制vpn(不像使用系统脚本,向上和向下脚本等的许多更复杂的“ hack”方法一样),这太简单了!
第1步-设置:(假设已安装传输工具,因此存在debian-transmission用户!)
sudo apt-get install iptables
sudo apt-get install iptables-persistent
第2步-创建传输IP规则文件
sudo nano transmission-ip-rules
并在下面的代码块中添加文本,从 #!/bin/bash
重要
- 如果您的本地网络不是192.168.1.x格式,请更改NET变量以对应于您自己的本地网络寻址格式!
- 另请注意,192.168.1.0 / 25实际给出的范围是192.168.1.0-255!
- 有时您的接口eth0,tun0(这是vpn)等。可能有所不同-检查'ifconfig'并在需要时进行更改。
#!/bin/bash
# Set our rules so the debian-transmission user group can only route through the vpn
NET=192.168.1.0/25
GROUP=debian-transmission
IFACE_INTERNAL=eth0
IFACE_VPN=tun0
ALLOW_PORT_FROM_LOCAL=9091
iptables -A OUTPUT -d $NET -p tcp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -d $NET -p udp --sport $ALLOW_PORT_FROM_LOCAL -m owner --gid-owner $GROUP -o $IFACE_INTERNAL -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o $IFACE_VPN -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -o lo -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner $GROUP -j REJECT
# not needed - but added these to properly track data to these interfaces....when using iptables -L -v
iptables -A INPUT -i $IFACE_VPN -j ACCEPT
iptables -A INPUT -i $IFACE_INTERNAL -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
# track any forward (NAT) data for completeness - don't care about interfaces
iptables -A FORWARD
保存文件,然后运行
sudo iptables -F
sudo chmod +x transmission-ip-rules
sudo ./transmission-ip-rules
然后确保这些规则在两次重启之间仍然存在:
sudo dpkg-reconfigure iptables-persistent
并在两个提示上点击“是”。完成!
该脚本的最大优点是它将跟踪设备中的所有数据!当您发出
sudo iptables -L -v
它会显示要去往哪个接口和哪一侧的INPUT或OUTPUT的数据量,因此可以确保vpn脚本正常工作。例如;
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1749K 661M ACCEPT all -- tun0 any anywhere anywhere
3416K 3077M ACCEPT all -- eth0 any anywhere anywhere
362K 826M ACCEPT all -- lo any anywhere anywhere
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 all -- any any anywhere anywhere
Chain OUTPUT (policy ACCEPT 2863K packets, 2884M bytes)
pkts bytes target prot opt in out source destination
1260 778K ACCEPT tcp -- any eth0 anywhere 192.168.1.0/ 25 tcp spt:9091 owner GID match debian-transmission
0 0 ACCEPT udp -- any eth0 anywhere 192.168.1.0/ 25 udp spt:9091 owner GID match debian-transmission
1973K 1832M ACCEPT all -- any tun0 anywhere anywhere owner GID match debian-transmission
8880 572K ACCEPT all -- any lo anywhere anywhere owner GID match debian-transmission
13132 939K REJECT all -- any any anywhere anywhere owner GID match debian-transmission reject-with icmp-port-unreachable
此脚本已经在vpn的连接,断开连接,重新引导上进行了详尽的测试。效果很好。传输只能使用VPN。与其他脚本相比,此脚本的最大优点是我已确保(通过iptables -L -v
),您的数据就会与传输的内容保持一致(通过为每个接口eth0,vpn(tun0)添加INPUT(全部)和Forward(全部)规则)。所以你确切地知道发生了什么!数据总数将不完全与传输相符-不幸的是,我无法在输入方面与debian-transmission用户区分开,并且这将产生额外的开销,或者使用同一VPN的其他进程可能也会出现,但您会看到数据大致相符在VPN的INPUT端,大约一半在VPN的OUTPUT端,以确认其工作正常。还要注意的另一件事是-断开VPN会花费一些时间(传输停止所有流量),然后重新连接以进行传输才能在新的VPN上“开始运行”,因此不必担心大约需要5分钟才能再次开始洪流。 。
提示- 如果您想逐行了解此脚本的工作原理,请使用Google'MAN iptables'并查看有关带宽监视的文章 ...