#proxy.sh #当您的电脑通过USB连接到手机并使用USB网络共享时,所有电脑的流量都应该通过手机的tun0接口(由VPN创建)转发 #主要功能: #1.将dev变量设置为rndis0,这是USB网络共享的接口 #2.添加了NAT转换规则,确保所有通过tun0接口出去的数据包进行源地址伪装 #3.允许从rndis0接口到tun0接口的流量转发 ##手机需要root,在pixel 1代,安卓9.0上测试通过 #!/system/bin/sh tun='tun0' # 虚拟接口名称 dev='rndis0' # USB网络共享接口 interval=3 # 检测网络状态间隔(秒) pref=18000 # 路由策略优先级 # 开启IP转发功能 sysctl -w net.ipv4.ip_forward=1 # 清除filter表转发链规则 iptables -F FORWARD # 添加NAT转换,确保所有通过tun0接口出去的数据包进行源地址伪装 iptables -t nat -A POSTROUTING -o $tun -j MASQUERADE # 允许从USB接口到`tun0`接口的流量转发 iptables -A FORWARD -i $dev -o $tun -j ACCEPT iptables -A FORWARD -i $tun -o $dev -j ACCEPT # 添加路由策略 ip rule add from all table main pref $pref ip rule add from all iif $dev table $tun pref $(expr $pref - 1) contain="from all iif $dev lookup $tun" while true ;do if [[ $(ip rule) != *$contain* ]]; then if [[ $(ip ad|grep 'state UP') != *$dev* ]]; then echo -e "[$(date "+%H:%M:%S")]dev has been lost." else ip rule add from all iif $dev table $tun pref $(expr $pref - 1) echo -e "[$(date "+%H:%M:%S")]network changed, reset the routing policy." fi fi sleep $interval done