杨坤的分享空间
目录:
原始引用地址: 如何解决内网中网络被限制的问题
time: 2019.11.21 08:20
正式开始前先看个图:
当你处于内网中,你想访问的资源被网关拒绝时,如上图中截图,你应该怎么处理?有没好的方法解决这些问题?当然有。你只需要一台linux主机,虚拟机也可以。这台linux主机充当你的网当,当需要访问被拒绝的资源时,直接转发到其它地方处理,这样你就可以访问这些资源了。当然你不知道哪些资源禁止访问,简单粗暴的方法是直接转发所有的数据。
如下图,是访问被拒绝时的抓包数据,图中1为一个正常的http get数据包,当网关检测到其数据中的HOST的主机或ip在禁止访问列表中时,中止正常的http连接,进行第2,3步。先给http client发个302转移(就是我们上面看到访问被拒绝的页面),之后直接给http client发送了两次rst(有可能一次是http server发的,一次是网关发的),这样一个正常的http 连接就这样被网关给中止了,这其实就是一个第三人攻击了。其实网关在给client发301和rst数据时,他应该也给server发至少一个rst。
通过这个分析我们可以发现http连接是十分不安全的,可以过滤你的数据,篡改你的数据,给你发301,也可以给你发送垃圾信息,如广告。如果是https你的信息,都是加密的,网关看不到任何传输的数据内容,包括刚才说的http get中的host。如果是https只能针对特定的ip禁止访问,这个工作量大。
分析完了,以下进入正题。
转发tcp分为本机转发和其它机器转发,本机转发就是虚拟机本地转发数据,其它机器转发就是充当路由器时的转发。
win7(172.21.9.8)===>ubuntu(172.21.9.222)==>vps(199.xx.xx.xx)==>home(123.112.xx.xx)
route add 123.112.xx.xx 172.21.9.222
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
sudo iptables -t nat -I PREROUTING -p tcp -d 123.112.xx.xx -j REDIRECT --to-ports 7777
sudo ss-redir -v -u -s '199.180.xx.xx' -p '58123' -m 'aes-256-cfb' -k 'xxxxxxx' -b '0.0.0.0' -l '7777'
或者
sudo ss-redir -c /etc/shadowsocks-libev/config.json -v -u
ssh [email protected]
ubuntu(172.21.9.222)==>vps(199.180.xx.xx)==>home(123.112.xx.xx)
使用以下iptables命令执行:
sudo iptables -t nat -I OUTPUT -p tcp -d 123.112.xx.xx -j REDIRECT --to-ports 7777
本地联网与远程联网不同的区别在于:
使用iptables REDIRECT的位置不同,本的位于OUTPUT中,需要转发的位于PREROUTING中。
外部udp访问(其它机器通过这个机器进行udp访问,win7(172.21.9.8)===>ubuntu(172.21.9.222)==>vps(199.180.xx.xx)==>home(123.112.xx.xx)
sudo ip rule add fwmark 0x01/0x01 table 100
sudo ip route add local 0.0.0.0/0 dev lo table 100
sudo iptables -t mangle -N SSUDP
sudo iptables -t mangle -A SSUDP -p udp --dport 8000 -j TPROXY --on-port 7777 --tproxy-mark 0x01/0x01
sudo iptables -t mangle -A PREROUTING -j SSUDP
本地udp无法转发,原因未知:
https://blog.lilydjwg.me/2018/7/16/transparent-proxy-for-tcp-and-udp-with-iptables.213139.html
把网关设置为所在的机器
在网关所在的机器运行以下命令,对所有数据进行转发
sudo iptables -t nat -I PREROUTING -p tcp -j REDIRECT --to-ports 7777
也可以通过wireshark抓包,发现哪个或者哪段的ip被屏蔽,就哪个或段的ip添加进行:
sudo iptables -t nat -I PREROUTING -p tcp -d 123.151.0.0/16 -j REDIRECT --to-ports 7777
sudo iptables -t nat -I PREROUTING -p tcp -d 199.180.xx.xx -j REDIRECT --to-ports 7777
参考:
http://ezlost.tk/2018/02/24/ss-redir/
https://lixingcong.github.io/2018/06/11/ss-redir-ipset/