|
|
本帖最后由 ShareBit 于 2020-12-18 13:09 编辑
在同一局域网内部,不管是无线还是有线方式,在搭建了shadow socks R+系列插件和v..p...n的openwrt路由器下,都能正常访问谷歌等网址,但是如果外部通过v..p...n连接到openwrt上之后,无法访问谷歌等网址,我发现了其中有一种情况会这样。问题出在 /var/etc/shad..dow...socksr.include 内容有一行代码不对。
能正确使用的配置文件如下:
root@OpenWrt:~# cat /var/etc/shad..dow...socksr.include
#!/bin/sh
iptables-save -c | grep -v "SS_SPEC" | iptables-restore -c
iptables-restore -n <<-EOT
*nat
:SS_SPEC_WAN_AC - [0:0]
:SS_SPEC_WAN_FW - [0:0]
-I PREROUTING 1 -p tcp -m comment --comment _SS_SPEC_RULE_ -j SS_SPEC_WAN_AC
-I OUTPUT 1 -p tcp -m comment --comment _SS_SPEC_RULE_ -j SS_SPEC_WAN_AC
-A SS_SPEC_WAN_AC -m set --match-set whitelist dst -j RETURN
-A SS_SPEC_WAN_AC -m set --match-set blacklist dst -j SS_SPEC_WAN_FW
-A SS_SPEC_WAN_AC -m set --match-set fplan src -j SS_SPEC_WAN_FW
-A SS_SPEC_WAN_AC -d xx.xx.xx.xx/32 -j RETURN
-A SS_SPEC_WAN_AC -m set --match-set gfwlist dst -j SS_SPEC_WAN_FW
-A SS_SPEC_WAN_AC -m set --match-set gmlan src -m set ! --match-set china dst -j SS_SPEC_WAN_FW
-A SS_SPEC_WAN_AC -m set --match-set china dst -j RETURN
-A SS_SPEC_WAN_FW -d 0.0.0.0/8 -j RETURN
-A SS_SPEC_WAN_FW -d 10.0.0.0/8 -j RETURN
-A SS_SPEC_WAN_FW -d 127.0.0.0/8 -j RETURN
-A SS_SPEC_WAN_FW -d 169.254.0.0/16 -j RETURN
-A SS_SPEC_WAN_FW -d 172.16.0.0/12 -j RETURN
-A SS_SPEC_WAN_FW -d 192.168.0.0/16 -j RETURN
-A SS_SPEC_WAN_FW -d 224.0.0.0/4 -j RETURN
-A SS_SPEC_WAN_FW -d 240.0.0.0/4 -j RETURN
-A SS_SPEC_WAN_FW -p tcp -m multiport --dports 22,53,587,465,995,993,143,80,443 -j REDIRECT --to-ports 1234
COMMIT
*mangle
COMMIT
EOT
不正确的配置文件如下:
[root@PandoraBox:/root]#cat /var/etc/shad..dow...socksr.include
#!/bin/sh
iptables-save -c | grep -v "SS_SPEC" | iptables-restore -c
iptables-restore -n <<-EOT
*nat
:SS_SPEC_WAN_AC - [0:0]
:SS_SPEC_WAN_FW - [0:0]
-I PREROUTING 1 -i br-lan -p tcp -m comment --comment _SS_SPEC_RULE_ -j SS_SPEC_WAN_AC
-I OUTPUT 1 -p tcp -m comment --comment _SS_SPEC_RULE_ -j SS_SPEC_WAN_AC
-A SS_SPEC_WAN_AC -m set --match-set whitelist dst -j RETURN
-A SS_SPEC_WAN_AC -m set --match-set blacklist dst -j SS_SPEC_WAN_FW
-A SS_SPEC_WAN_AC -m set --match-set bplan src -j RETURN
-A SS_SPEC_WAN_AC -m set --match-set fplan src -j SS_SPEC_WAN_FW
-A SS_SPEC_WAN_AC -d xx.xx.xx.xx/32 -p tcp -m tcp ! --dport 53 -j RETURN
-A SS_SPEC_WAN_AC -m set --match-set gfwlist dst -j SS_SPEC_WAN_FW
-A SS_SPEC_WAN_AC -m set --match-set gmlan src -m set ! --match-set china dst -j SS_SPEC_WAN_FW
-A SS_SPEC_WAN_AC -m set --match-set china dst -j RETURN
-A SS_SPEC_WAN_FW -d 0.0.0.0/8 -j RETURN
-A SS_SPEC_WAN_FW -d 10.0.0.0/8 -j RETURN
-A SS_SPEC_WAN_FW -d 127.0.0.0/8 -j RETURN
-A SS_SPEC_WAN_FW -d 169.254.0.0/16 -j RETURN
-A SS_SPEC_WAN_FW -d 172.16.0.0/12 -j RETURN
-A SS_SPEC_WAN_FW -d 192.168.0.0/16 -j RETURN
-A SS_SPEC_WAN_FW -d 224.0.0.0/4 -j RETURN
-A SS_SPEC_WAN_FW -d 240.0.0.0/4 -j RETURN
-A SS_SPEC_WAN_FW -p tcp -m multiport --dports 22,53,587,465,995,993,143,80,443 -j REDIRECT --to-ports 1234
COMMIT
*mangle
COMMIT
EOT
对比之后,我们发现了原因:
正确设置应该是 -I PREROUTING 1 -p tcp -m comment --comment _SS_SPEC_RULE_ -j SS_SPEC_WAN_AC
找到原因之后,解决方法就比较多了,比如
mkdir /sssfix
在/sssfix目录下建立文件 shad..dow...socksr.fix.sh, 内容如下:
cat /sssfix/shad..dow...socksr.fix.sh
#!/bin/sh
sleep 60
while :
do
sleep 15
if [ ! -f /var/etc/shad.ows.ocksr.include ]; then
continue
fi
grep -Fq "br-lan" /var/etc/shad.owso.cksr.include
if [ $? -ne 0 ]; then
continue
fi
if [ -f /tmp/shad.ows.ocksr.include ]; then
rm /tmp/shad.ows.ocksr.include
fi
sed -i 's/ -i br-lan//' /var/etc/shad.owso.cksr.include
cp /var/etc/shad.ows.ocksr.include /tmp/shad.ows.ocksr.include
chmod 755 /tmp/shad.ows.ocksr.include
/tmp/shad.ows.ocksr.include
done
然后对文件/sssfix/shad..dow...socksr.fix.sh 设置可执行权限
chmod 755 /sssfix/shad..dow...socksr.fix.sh
再修改一下 /etc/rc.local文件,如下:
[root@PandoraBox:/]#cat /etc/rc.local
# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.
/sssfix/shad..dow...socksr.fix.sh &
exit 0
请看着图片理解上面打印的文字:

这样就可以在路由器启动起来之后,这个脚本经过60秒等待,就修正了这个错误。如果中途发生了变化,会在15秒检测中再次自动修正。上面的.....等请忽略,我是因为要防止屏蔽才打上这些点的。
|
评分
-
查看全部评分
|