1. 建立具有redirect能力的proxy软件,例如redsocks和其他某些类型的程序
2. 为iptables中的链路起一个名字,这里使用CustomizeGateway作为示例名称
iptables -t nat -N CustomizeGateway
#保留地址、私有地址、回环地址 不走代理
iptables -t nat -A CustomizeGateway -d 0.0.0.0/8 -j RETURN
iptables -t nat -A CustomizeGateway -d 127.0.0.0/8 -j RETURN
iptables -t nat -A CustomizeGateway -d 10.0.0.0/8 -j RETURN
iptables -t nat -A CustomizeGateway -d 169.254.0.0/16 -j RETURN
iptables -t nat -A CustomizeGateway -d 172.16.0.0/12 -j RETURN
iptables -t nat -A CustomizeGateway -d 192.168.0.0/16 -j RETURN
iptables -t nat -A CustomizeGateway -d 224.0.0.0/4 -j RETURN
iptables -t nat -A CustomizeGateway -d 240.0.0.0/4 -j RETURN
#同理,可以借助此规则指定以下IP为局域网内不走此路的设备IP,如需生效需取消注释
#iptables -t nat -A CustomizeGateway -s 192.168.2.10 -j RETURN
#同理,借助该规则,设定服务端IP(替换x.x.x.x),使所有连接通过本地线路连接服务端,避免链路回环
iptables -t nat -A CustomizeGateway -d x.x.x.x -j RETURN
#设置属于cidr_list的ip列表走本地线路
iptables -t nat -A CustomizeGateway -m set --match-set cidr_cn dst -j RETURN
#重定向其他所有目标ip链路的tcp到本地指定端口(修改为本地实际端口xxxxx)
iptables -t nat -A CustomizeGateway -p tcp -j REDIRECT --to-ports xxxxx
# OUTPUT链添加一条规则,重定向tcp至CustomizeGateway链
iptables -t nat -A OUTPUT -p tcp -j CustomizeGateway
iptables -t nat -A PREROUTING -p tcp -j CustomizeGateway
以上命令可以逐行单独执行,也可以放进shell脚本批量执行
3. ipset 过滤某些地区的ip段
curl -sL http://f.ip.cn/rt/chnroutes.txt | egrep -v '^$|^#' > cidr_cn
sudo ipset -N cidr_cn hash:net
for i in `cat cidr_cn`; do echo ipset -A cidr_cn $i >> ipset.sh; done
chmod +x ipset.sh && sudo ./ipset.sh
rm -f ipset.cidr_cn.rules
sudo ipset -S > ipset.cidr_cn.rules
sudo cp ./ipset.cidr_cn.rules /etc/ipset.cidr_cn.rules
4. 开启内核参数
#开启转发修改vim /etc/sysctl.conf,新增一行或找到取消注释
net.ipv4.ip_forward=1
#执行命令使其生效
sysctl -p
5. 路由表修改
#先使用route 命令查看当前路由表
#使用ifconfig 查看当前接口名称
route del default
route add default gw 原网关ip 网卡接口名称