我有一个自写的接口 tun0(基于TUN/TAP),它输出它接收到的内容。
我需要系统的所有流量都流过这个接口。
接口的作用是:
- 找出可能被审查的数据包并通过隧道传输它们。
- 通过所有其他交通不受影响。
正如你猜想的那样,我正在尝试构建一个反审查工具。
关于隧道的决定必须在 tun0 进程内进行,
因为只有在那里我们才能使用受信任的 DNS。
我需要你的帮助来告诉我如何让所有的流量通过一个自写的接口 tun0。如果 tun0 需要更改,我要求您提供此类更改。
以下是我如何尝试让所有流量通过 tun0 并失败(ping 失败)。
编译
gcc tun0.c
sudo ./a.out
配置
sudo ip addr add 10.0.0.1/24 dev tun0
创建表约翰
$ cat /etc/iproute2/rt_tables # # reserved values # 255 local 254 main 253 default 0 unspec # # local # #1 inr.ruhep 200 John
顺序很重要:
sudo ip rule add from all lookup John
sudo ip route add default dev tun0 table John
sudo ip rule add iif tun0 lookup main priority 500
$ ip rule 0: from all lookup local 500: from all iif tun0 lookup main 32765: from all lookup John 32766: from all lookup main 35000: from all lookup default
故障排除
sudo tcpdump -i wlp2s0 -qtln icmp
然后ping -I tun0 8.8.8.8
显示没有捕获到数据包,这意味着没有数据包通过iif tun0 lookup main
规则从 tun0 传输到 wlp2s0。当我替换
tun0
为lo
到处时,它对我有用。
也试过
- 关闭反向路径过滤,
rp_filter=0
在/etc/sysctl.conf
解答疑难解答
iptables -I FORWARD -j LOG --log-prefix "filter/FORWARD "
iptables -t nat -I OUTPUT -j LOG --log-prefix "nat/OUTPUT "
iptables -t nat -I PREROUTING -j LOG --log-prefix "nat/PREROUTING "
iptables -t nat -I POSTROUTING -j LOG --log-prefix "nat/POSTROUTNG "
tail -f /var/log/syslog
来自答案的修改来源也在这里。