享受自由的网络
文章目录
最近在家办公,发现天朝的网络限制越来越严了。周末终于有时间,把家里电脑的上网状况改善一下了,这里记录一下。
搭FQ的梯子
在香港买了台服务器,在上面装了个shadowsocks-libev
。为什么用shadowsocks-libev
,因为买的服务器配置不太高,这个是用c语言和libev写的,资源占用低。
$ yum install -y epel-release
$ curl -o /etc/yum.repos.d/librehat-shadowsocks-epel-7.repo https://copr.fedorainfracloud.org/coprs/librehat/shadowsocks/repo/epel-7/librehat-shadowsocks-epel-7.repo
$ yum install -y shadowsocks-libev
编辑shadowsocks-libev
的配置文件:
$ vim /etc/shadowsocks-libev/config.json
{
"server":"0.0.0.0",
"server_port":55387,
"local_port":1080,
"password":"<A-PASSWORD>",
"timeout":60,
"method":"xchacha20-ietf-poly1305"
}
这里用xchacha20-ietf-poly1305
这个算法,据说效率好一点,而且也能稍微抗点干扰。
启动并设置开机自启动:
$ systemctl enable shadowsocks-libev && systemctl start shadowsocks-libev
在家里的Mac电脑上也安装shadowsocks-libev
:
$ brew install shadowsocks-libev
编辑shadowsocks-libev
的配置文件:
$ vim /usr/local/etc/shadowsocks-libev.json
{
"server": "xx.xx.xx.xx",
"server_port": 55387,
"local_port": 1086,
"password": "<A-PASSWORD>",
"timeout": 600,
"method": "xchacha20-ietf-poly1305"
}
这里的server
设置为上面那台服务器的公网IP,password
、method
要与上面的设置保持一致。
启动它并设置开机自启动:
$ brew services enable shadowsocks-libev
至此即在本机Run起了一个Socks5代理127.0.0.1:1086
,任何程序使用该代理上网,即是FQ了。
自动使用FQ梯子
显然所有的请求都走上述Socks5代理,上网速度肯定很慢,还好已经有人整理了gfwlist
,即应该FQ的网站地址列表。那么我们只需要搭建一个智能代理,当遇到FQ地址时使用上述Socks5代理,否则就直接访问。在网上找了下,这里使用privoxy
这个软件完成这件事。
首先用autoproxy2privoxy这个工具将gfwlist
转成privoxy
识别的actionsfile
文件。
$ make -B proxy=socks5://127.0.0.1:1086
# 这里会生成gfwlist.action
安装privoxy
:
$ brew install privoxy
将上述生成的gfwlist.action
放到privoxy
的配置目录,并进行相应的配置:
$ cp -r gfwlist.action /usr/local/etc/privoxy/gfwlist.action
$ vim /usr/local/etc/privoxy/config
....
actionsfile default.action # Main actions file
actionsfile user.action # User customizations
actionsfile gfwlist.action # 增加gfwlist.action
actionsfile custom.action # 增加自定义代理规则
....
有些地址虽然不在gfwlist列表里,但也要FQ才能访问,因此这里添加了一个custom.action
:
$ cat /usr/local/etc/privoxy/custom.action
{+forward-override{forward-socks5 127.0.0.1:1086 .}}
.githubusercontent.com
github.com
这里提一句,actionsfile
文件里除了设置这些地址走Socks5代理外,还可以设置其它类型的代理,因此很适合做层次结构的代理服务器方案,参见这里。
启动它并设置开机自启动:
$ brew services start privoxy
然后在系统的网络设置处设置全局代理,System Preferences
-Network
-Advanced...
-Proxies
,这里设置Web Proxy(HTTP)
和Secure Web Proxy(HTTPS)
均为127.0.0.1:8118
。
注意一直明显不需要走代理的IP或域名填写到下面的Bypass proxy settings for these Hosts & Domains
里,如localhost、127.0.0.1、114.114.114.114
现在打开游览器应该可以正常FQ上网了,而且访问网内的网站速度也很快。
处理DNS污染问题
以为万事大吉了,但有些网站仍然打不开,最终查明是域名的DNS的域名解析结果被污染了。这里在本机搭建DNS
服务解决该问题。
安装dnsmasq
和dnscrypt-proxy
$ brew install dnsmasq
$ brew install dnscrypt-proxy
国内的一些域名可以安全地使用国内的DNS服务进行解析,这样快一点,有人已经将这些域名整理出来了,直接使用它。
$ /usr/bin/curl -x socks5://127.0.0.1:1086 -o /usr/local/etc/dnsmasq.d/accelerated-domains.china.conf https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf
这里用的是电信的DNS服务器,如果你是联通的网络,你可以执行下面的脚本将配置文件中的DNS服务器换成联通的:
sed -i -e 's/114.114.114.114/221.6.4.66/g' /usr/local/etc/dnsmasq.d/accelerated-domains.china.conf
然后配置dnsmasq
的主配置文件:
$ vim /usr/local/etc/dnsmasq.conf
listen-address=127.0.0.1
no-resolv
conf-dir=/usr/local/etc/dnsmasq.d
server=127.0.0.1#5300
这里除上面的accelerated-domains.china.conf
列表中的域名使用114.114.114.114
解析外,其它域名解析转发给dnscrypt-proxy
处理。
配置dnscrypt-proxy
的主配置文件:
$ vim /usr/local/etc/dnscrypt-proxy.toml
# 监听5300端口
listen_addresses = ['127.0.0.1:5300', '[::1]:5300']
# 使用下面3个公开的DNS服务
server_names = ['google', 'cloudflare', 'cloudflare-ipv6']
# 如果找不到合适的公开DNS服务,则使用下面的DNS服务
fallback_resolvers = ['9.9.9.9:53', '8.8.8.8:53']
# 担心这些DNS请求被墙,设置使用代理发送DNS请求
force_tcp = true
proxy = 'socks5://127.0.0.1:1086'
启动dnsmasq
和dnscrypt-proxy
:
$ sudo brew services start dnsmasq
$ brew services start dnscrypt-proxy
注意因为dnsmasq要监听53端口,因此要使用root权限启动
然后在网络设置处设置全局DNS服务器为127.0.0.1
,System Preferences
-Network
-Advanced...
-DNS
,在这个界面中删除原来的所有DNS Servers
,添加127.0.0.1
。
强制老旧程序使用全局代理
有些老旧程序并不会使用系统的全局代理,这点很讨厌,我这里可以使用proxychains-ng
强制这些老旧程序使用全局HTTP代理。
安装proxychains-ng
:
$ brew install proxychains-ng
编辑proxychains-ng
的主配置文件:
$ vim /usr/local/etc/proxychains.conf
# Quiet mode (no output from library)
quiet_mode
# Proxy DNS requests - no leak for DNS data
proxy_dns
[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
# socks4 127.0.0.1 9050
http 127.0.0.1 8118
然后在启动老旧程序前加上/usr/local/bin/proxychains4
即可,也可以写成脚本,如下:
#!/bin/bash
(/usr/local/bin/proxychains4 '/Applications/Navicat for MySQL.app/Contents/MacOS/Navicat for MySQL' </dev/null >/dev/null 2>&1) &
上面的例子里,启动的Navicat
即会使用到全局的HTTP代理。
至此系统中所有程序均可以自动选择连网的方式,终于可以愉快地享受自由的网络了。
DONE!
参考
- https://www.howru.cc/articles/350.html
- https://github.com/jeremyxu2010/autoproxy2privoxy
- https://www.privoxy.org/user-manual/actions-file.html#FORWARD-OVERRIDE
- https://w2x.me/2019/06/12/Mac-OS%E9%85%8D%E7%BD%AEDnsmasq-Dnscrypt%E6%9D%A5%E8%A7%A3%E5%86%B3DNS%E6%B1%A1%E6%9F%93%E9%97%AE%E9%A2%98/
- https://github.com/felixonmars/dnsmasq-china-list
- https://www.hi-linux.com/posts/48321.html
文章作者 Jeremy Xu
上次更新 2020-02-16
许可协议 © Copyright 2020 Jeremy Xu