部分内容转载,亲自实践过可行。
设置路由器及对抗dns污染
https://story.tonylee.name/2016/03/31/yong-shu-mei-pai-da-zao-wu-xian-zhong-ji-ke-xue-shang-wang-lu-you-qi/
对抗http劫持
http://www.williamlong.info/archives/4181.html
对抗http劫持github 地址
https://github.com/lehui99/ahjs5s
(科学上网内容不在此讨论,理论上ss可以直接扶墙,请自行实践。)
——————————分割线——————————
原理:
DNS劫持是通过设置两个 无污染的DNS来解决,中科大和熊猫dns。
http劫持是通过把一个完整的HTTP请求拆分到几个数据包中,在isp上运营商无法检测到完整的http数据包。可以解决一般的http劫持,具体原理详情见作者github。
效果:
dns污染不用说了,中科大的dns解析还是相当快的。
http劫持 b站的插广告基本解决。(吐槽:校园网宽带,电信出口。弹博彩广告,投诉工信部、互联网管理中心解决了,开始弹美的电饭锅广告了。)
——————————分割线———————————
硬件:树莓派3 (自带wifi) 网线x1(连路由器用,你还有一个无线网卡直接无视。)
前期准备:树莓派初始化完成,可以连上SSH和远程桌面,开启了root用户的远程登陆。
最终效果:树莓派利用自带wifi连接路由器,通过网线连接电脑提供网络服务。网线可以换成一个无限网卡。
教程开始:
1更改WIFI国别
树莓派默认使用英国,直接的影响就是,可能某些5G信道会搜索不到,
编辑
/etc/wpa_supplicant/wpa_supplicant.conf
更改country
为CN。
2.连接WIFI
连接windows远程桌面CMD执行mstsc命令,输入树莓派的ip地址。登陆,输入root和root密码。树莓派桌面右上角wifi图标,输入wifi密码链接即可。
利用iwconfig命令查看wifi配置是否已经加载,用ifconfig来查看是否分配到IP。将SSH与远程桌面的登陆ip换成树莓派wifi网卡对于IP地址。
3.固定接口名称
固定接口名称.插入WIFI适配器时,系统会随机分配哪个是wlan0,哪个是wlan1。因为两个适配器不一样,会导致运行在上面的配置可能没办法生效。因此,我们必须让系统记住WIFI适配器使用的接口名称。
编辑新增文件
/etc/udev/rules.d/10-network.rules
内容如下:
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="wlan0"
注意其中的mac地址,设置为你的设备的mac地址。获得mac地址,可以使用命令ip link
重启系统后,再插入设备,就会绑定接口名称。
3.更改eth0(有线网卡)的IP
编辑文件/etc/network/interfaces
,将eth0的配置改为如下
1 auto eth0 2 iface eth0 inet static 3 address 192.168.3.1 4 netmask 255.255.255.0
完成后重启路由
sudo reboot
一定注意要完整的复制代码替换否则不起作用!!
验证输入 ifconfig 查看 eth0 对应ip地址是否为 192.168.3.1。此时电脑的以太网状态—详细信息 对应ip地址应该为 192.168.3.xxx
4.安装dnsmasq来设置DHCP服务
有线网络使用192.168.3这个网段
使用命令sudo apt-get install dnsmasq
,编辑/etc/dnsmasq.conf
,注意更改如下几段:
1 #配置监听地址 2 listen-address=127.0.0.1,192.168.3.1 3 #配置DHCP分配段 4 dhcp-range=192.168.3.50,192.168.3.150,12h 5 dhcp-range=192.168.4.50,192.168.4.150,12h
运行命令sudo service dnsmasq restart
来启用
5.开启包转发
Linux系统默认关闭了IP包转发,因此不能做路由器。所以需要先打开包转发
编辑/etc/sysctl.conf
,去掉以下属性前的注释:
1 # Uncomment the next line to enable packet forwarding for IPv4 2 net.ipv4.ip_forward=1
运行来启用
sudo sysctl -p
之后运行
sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
来启用wlan0端口的NAT.
6.安装iptables-persistent
防火墙规则重启后就丢失了,为了能够规则开机自动加载,我们可以使用iptables-persistent。
用命令
sudo apt-get install iptables-persistent
来安装该组件,根据其提示进行初次设置(一路确认)。
该组件默认会将防火墙规则保存到/etc/iptables/rules.v4
中。
你可以使用如下命令保存和读入规则:
1 #保存现有规则 2 sudo service netfilter-persistent save 3 #读取并应用先有规则 4 sudo service netfilter-persistent reload
7.建立无污染DNS
以前都需要使用chinadns等项目,现在基本上都直接使用中科大的DNS,直接无污染。
在/etc/dnsmasq.conf,加入如下规则
1 no-resolv 2 #中科大DNS 3 server=202.38.93.153 4 server=202.141.162.123 5 #熊猫DNS 6 server=182.254.158.191 7 server=120.27.30.176 8 #阿里DNS(备用) 9 server=223.5.5.5
重启dnsmasq
1 sudo service dnsmasq restart
可以用dig t.co
测试一下。
8.安装Anti-Hijack Socks5 Server
以下简称ahsjs5s:
ahsjs5s将发出的HTTP请求拆分到多个数据包中的原理抑制HTTP劫持。
需要Python环境Python2.7、3.4、3.5测试成功。
首先 git到本地
git clone https://github.com/lehui99/ahjs5s
修改 config.json内容如下
1 #ahsjs5s Socks5端口 改为1081不与ss冲突 2 server_port:1081 3 4 #拆分HTTP请求的单包大小,默认10(字节),推荐20到50之间。默认单包大小下有些网页视频无法播放,30正常。 5 send_packet_size:30
执行
1 #进入ahsjs5s文件夹 2 cd /root/ahsjs5s/ 3 #开始执行py脚本,无视关闭ssh与否。 4 nohup python main.py config.json &
至此防http劫持的本地服务器就搭建完成了。
现在如果不想再折腾的可以直接使用 Socks5,代理端口192.168.3.1 :1081。
还在欲求不满想要全局代理的 往下看!
9.安装redsocks
redcocks相当于代理的代理,它控制着本地运行的所有代理。流量被转发到redcocks,由它决定该走那个下级代理出去。
执行
1 sudo apt-get install redsocks
来安装软件,之后编辑/etc/redsocks.conf
,更改其中的redsocks部分如下
1 redsocks 2 { 3 local_ip = 0.0.0.0; 4 local_port = 12345; 5 ip = 127.0.0.1; 6 #放劫持端口 7 port = 1081; 8 }
使用命令来启动软件
1 sudo service redsocks start
检查redsocks和ahsjs5s对应端口是否成功监听。
1 netstat -an|grep 1081 2 netstat -an|grep 12345
10.导入防火墙规则
1 sudo iptables -t nat -N SHADOWSOCKS 2 #不转发常用本地ip 3 sudo iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/8 -j RETURN 4 sudo iptables -t nat -A SHADOWSOCKS -d 10.0.0.0/8 -j RETURN 5 sudo iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN 6 sudo iptables -t nat -A SHADOWSOCKS -d 169.254.0.0/16 -j RETURN 7 sudo iptables -t nat -A SHADOWSOCKS -d 172.16.0.0/12 -j RETURN 8 sudo iptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN 9 sudo iptables -t nat -A SHADOWSOCKS -d 224.0.0.0/4 -j RETURN 10 sudo iptables -t nat -A SHADOWSOCKS -d 240.0.0.0/4 -j RETURN 11 #将tcp请求转发到12345端口 12 sudo iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 12345 13 #执行 14 sudo iptables -t nat -A OUTPUT -p tcp -j SHADOWSOCKS 15 sudo iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS
然后保存规则
1 sudo service netfilter-persistent save
11.开机启用防火墙规则
iptables-persistent可以开机加载防火墙规则。但是因为防火墙规则中,有使用到redsocks的端口12345,
启动顺序不同,很可能redsocks还没有启动,防火墙规则先加载了,所以会导致防火墙规则加载失败。
因此,我们需要把规则加载放入/etc/rc.local中:
1 iptables-restore < /etc/iptables/rules.v4
至此有一个对抗DNS污染和http劫持的树莓派路由器就搭建完毕了。
运营商劫持应该已经解决了90%(吐槽:校园网电信出口劫持没个完,投诉校园网与电信互相扯皮)