佬友们或许经常在网络上能看见一些诸如修改路由规则、给数据包打标签、更改数据包走向等等的文章,这些文章看起来非常的高大上,但是(由于网络环境不同,当然还有可能是AI生成或者不加技术验证就抄来抄去等原因)用起来也非常的费劲,甚至把服务器整失联了。
今天就给大家用一个实例的方式稍微讲解一下实现方式和原理。
准备工作:
首先检查本地是否有ip、iptables命令,执行以下命令只要不返回 command not found 就可以了。
ip --help
iptables --help
添加计划任务防止服务器失联:
#crontab -e 添加一条计划任务 5分钟自动清除rule规则
*/5 * * * * ip rule del table 99999
#使计划任务生效
/etc/init.d/cron restart
实例讲解:【尽可能用最简单最容易理解的方法来实现】
查看当前IP
echo IP:$(curl -s ifconfig.me)
将本机全部数据包(不包括localhost)转向路由表 99999
ip rule add table 99999
将标签是 0×99998 的数据包转向路由表 main
ip rule add fwmark 0x99998 table main
给流向本机22端口的数据包打上标签,很多教程没有这一条就会导致服务器失联(本机流量一般只能使用INPUT、OUTPUT)
iptables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark 0x99998
把不需要流向路由表99999的数据包剔除出表,以下IP仅为演示(具体情况要看自己的实际情况)
ip route add throw 10.0.0.0/8 table 99999
给路由表99999添加默认路由,在我发的其他 零基础教程 里有相关介绍),(这个10.20.30.40就是其他接口的IP,可以自行修改)
ip route add default via 10.20.30.40 table 99999
再次查看当前IP,是不是发现IP已经发生了变化
echo IP:$(curl -s ifconfig.me)
成品shell以cftun为例(https://www.nodeloc.com/d/23373)
#!/bin/bash
echo "Before IP:"$(curl -s ifconfig.me)
ip rule add table 99999 prio 30000
ip -6 rule add table 99999 prio 30000
ip rule add fwmark 0x99998 table main prio 29999
ip -6 rule add fwmark 0x99998 table main prio 29999
iptables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark 0x99998
ip6tables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark 0x99998
ip route flush table 99999 >/dev/null 2>&1
ip route add default via 10.20.30.40 table 99999
ip -6 route flush table 99999 >/dev/null 2>&1
ip -6 route add default dev tun000 table 99999
ip route add throw 10.0.0.0/8 table 99999
ip route add throw 172.16.0.0/12 table 99999
ip route add throw 192.168.0.0/16 table 99999
ip route add throw 173.245.48.0/20 table 99999
ip route add throw 103.21.244.0/22 table 99999
ip route add throw 103.22.200.0/22 table 99999
ip route add throw 103.31.4.0/22 table 99999
ip route add throw 141.101.64.0/18 table 99999
ip route add throw 108.162.192.0/18 table 99999
ip route add throw 190.93.240.0/20 table 99999
ip route add throw 188.114.96.0/20 table 99999
ip route add throw 197.234.240.0/22 table 99999
ip route add throw 198.41.128.0/17 table 99999
ip route add throw 162.158.0.0/15 table 99999
ip route add throw 104.16.0.0/13 table 99999
ip route add throw 104.24.0.0/13 table 99999
ip route add throw 172.64.0.0/13 table 99999
ip route add throw 131.0.72.0/22 table 99999
ip -6 route add throw 2400:cb00::/32 table 99999
ip -6 route add throw 2606:4700::/32 table 99999
ip -6 route add throw 2803:f800::/32 table 99999
ip -6 route add throw 2405:b500::/32 table 99999
ip -6 route add throw 2405:8100::/32 table 99999
ip -6 route add throw 2a06:98c0::/29 table 99999
ip -6 route add throw 2c0f:f248::/32 table 99999
echo "After IP:"$(curl -s ifconfig.me)
以上的shell是实现了本机除了剔除掉的IP和22端口,其他数据包全部通过10.20.30.40。
寄语:计划任务一定要加(为了防止误操作导致服务器失联,成功之后就可以把计划任务移除了),throw一定要按自己的情况来配置。最后佬友们就可以放心大胆的玩耍啦。
Good luck to all