目录
使用OpenVPN + sniproxy (适用于Debian/Ubuntu)
小科普:OpenVPN是一种开放的VPN协议,功能强大,可以根据IP地址来判定是否通过代理。一般来说,普通的路由器不会过滤掉OpenVPN的包,但是由于特征明显,OpenVPN早已无法用于翻墙。sniproxy是一种基于https的代理。由于你游实质上是一个网页游戏,因此只要对网页做代理就可以了,而sniproxy就是做这个的。
本教程无关翻墙,如果把本教程运用在境外服务器上,后果自负(OpenVPN很容易被检测出来,请勿作死)
docker的安装
首先要卸载旧版的docker(如果有)
$ sudo apt-get remove docker docker-engine docker.io
解释: $ 指的是你的shell在普通权限下运行,不用复制进去。sudo代表用等同于root的权限执行。apt-get是Debian/Ubuntu发行版用于管理软件包的命令,remove是apt-get中用于卸载的参数。后面三个是旧版的docker程序。
之后安装这些软件包
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common
解释: update是apt-get中用于更新列表的参数。“\”用于换行。
接下来添加docker的GPG key
$ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/debian/gpg | sudo apt-key add -
解释: curl用于从互联网上获取文件并将其在屏幕上打印出来。“|”是管道,用于在两个命令之间传输信息。apt-key用于管理apt的密钥。mirrors.ustc.edu.cn是中国科大的开源镜像站,如果你的服务器靠近北京,可以改为清华大学的镜像mirrors.tuna.tsinghua.edu.cn。如果你用的是Ubuntu,请将debian改为ubuntu。
接下来添加软件源
$ sudo add-apt-repository \ "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/debian \ $(lsb_release -cs) \ stable"
解释:lsb_release用于获取你当前系统的版本号。如果你用的是Ubuntu,请将debian改为ubuntu。
接下来安装docker
$ sudo apt-get update $ sudo apt-get install docker-ce
接下来测试docker是否正常安装
$ sudo docker run hello-world
如果出现
Hello from Docker! This message shows that your installation appears to be working correctly.
及下面一堆内容,则表面docker已经正常安装。
如果你的机器访问国外较慢,可以编辑/etc/docker/daemon.json。在其中加入
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
}
重新启动docker
$ sudo systemctl reload docker
解释:systemctl是用于控制系统服务的程序。清华大学没有提供Docker Hub的源,因此这里使用中国科大的。
sniproxy的配置
先在本地加一个监听用的IP地址
$ sudo ip a add 192.168.142.1 dev lo
解释:ip是linux系统上用于配置网络的命令。dev是设备名,lo指本地环回。192.168.142.1可以更换成任意的内网地址。
创建运行的目录
$ sudo mkdir /srv/docker $ sudo mkdir /srv/docker/sniproxy $ sudo mkdir /srv/docker/sniproxy/conf $ sudo mkdir /srv/docker/sniproxy/log
解释:mkdir相当于windows系统上的md,用于创建目录。
接下来创建/srv/docker/sniproxy/conf/sniproxy.conf
$ sudo vim /srv/docker/sniproxy/conf/sniproxy.conf
点击a可以开始编辑,ESC键可以退出编辑。退出编辑之后,ZZ命令是保存。如果你没有编辑,可以用:q退出。如果你不想保存编辑的内容,请使用:q! 在其中写入
resolver {
nameserver 106.186.17.181
mode ipv4_first
}
access_log {
filename /var/log/sniproxy_access.log
}
listen 192.168.142.1:80 {
proto http
table all
source 172.19.121.21
}
listen 192.168.142.1:443 {
proto tls
table all
source 172.19.121.21
}
table all {
.* *
}
解释:nameserver指的是DNS服务器。202.38.93.153是中国科大提供的。如果你的服务器靠近北京,请使用清华大学提供的101.6.6.6。listen是监听的地址,请使用你刚才添加的IP地址。source指的是外接网卡的IP地址,172.19.121.21是笔者的机器,请更换为你的云服务器的IP。可以使用
ip a来查看。注:因为科大和清华的DNS解析出来的你游地址是香港的,而阿里云和腾讯云到香港会绕日本,因此改用OpenNIC的日本DNS 106.186.17.181
就绪之后,就可以运行了。
$ sudo docker run -itd \
--restart=always \
--name=sniproxy \
--net=host \
-v /srv/docker/sniproxy/conf:/etc/sniproxy \
-v /srv/docker/sniproxy/log:/var/log \
gaoyifan/sniproxy
解释:--name是你这个实例的名字。-v指的是真实环境到docker虚拟出来的环境的映射。gaoyifan/sniproxy是docker的镜像名称。
检查运行状态
$ sudo docker ps
如果看到STATUS一栏是Up多少时间,那么表面sniproxy运行成功了
如果想要停止运行,则可以使用
$ sudo docker rm sniproxy
bind9的配置
前面已经配置完代理了,现在要将访问指向这个代理,那么就需要用bind9来做了。
$ sudo mkdir /srv/docker/bind
在本地增加一个IP地址用于bind9的监听
$ sudo ip a add 192.168.142.254 dev lo
拉取bind的配置
$ git clone https://github.com/yangzhaofeng/bind-magireco.git
将/srv/docker/bind/named.conf.options中的配置改为
options {
directory "/var/cache/bind";
forwarders {
101.6.6.6;
};
dnssec-validation no;
auth-nxdomain no;
listen-on {
192.168.142.254;
};
response-policy { zone "rpz"; };
};
将/etc/bind/named.conf.local中的配置改为
zone "rpz" {
type master;
file "/etc/bind/db.rpz";
allow-query { none; };
};
编辑
/etc/bind/db.rpz
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
AAAA ::1
*.magi-reco.com A 192.168.142.1
启动bind9
$ sudo docker run -itd \ --restart=always \ --name=bind9 \ --net=host \ --privileged \ -v /srv/docker/bind:/etc/bind \ yangzhaofengsteven/bind9
查询一次DNS
$ dig @192.168.142.254 android.magi-reco.com
如果返回的结果含有
;; ANSWER SECTION: android.magi-reco.com. 5 IN A 192.168.142.1
则说明配置成功。
这样,sniproxy的配置就完成了。
OpenVPN的配置
安装easyrsa
sudo apt-get install easy-rsa
创建密钥对
$ sudo mkdir /srv/docker/openvpn/ $ sudo cp -r /usr/share/easy-rsa/ /srv/docker/openvpn/
编辑/srv/docker/openvpn/easy-rsa/vars,将密钥信息改为下面的内容
export KEY_COUNTRY="CN" export KEY_PROVINCE="Shanghai" export KEY_CITY="Shanghai" export KEY_ORG="None" export KEY_EMAIL="steve@example.com" export KEY_CN=MyVPN export KEY_ALTNAMES=AltMyVPN export KEY_NAME=MyVPN export KEY_OU=MyVPN
上述内容全部都可以自定义,但是建议填写服务器所在地的城市和你自己的邮件地址
接下来就可以创建密钥对了
$ cd /srv/docker/openvpn/easy-rsa/ # source vars # ./clean-all # ./build-ca # ./build-key-server server # ./build-dh $ cd keys/ $ sudo cp server.crt server.key ca.crt dh2048.pem /srv/docker/openvpn/
服务器的密钥对就创建好了。
接下来创建客户端的密钥对。
$ cd /srv/docker/openvpn/easy-rsa/ # source vars # ./build-key client1
/srv/docker/openvpn/ca.crt,/srv/docker/openvpn/easy-rsa/keys/client1.crt和/srv/docker/openvpn/easy-rsa/keys/client1.key就是客户端所需要用到的密钥文件。建议给每一个使用者都创建一个密钥对
修改配置文件和系统配置
接下来编辑/srv/docker/openvpn/server.conf
port 1194 ;proto tcp proto udp ;dev tap dev tun ca ca.crt cert server.crt key server.key dh dh2048.pem topology subnet server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "route 10.8.0.0 255.255.255.0" push "route 192.168.142.0 255.255.255.0" push "dhcp-option DNS 192.168.142.254" push "block-outside-dns" ;client-to-client duplicate-cn keepalive 10 120 persist-key persist-tun ;status openvpn-status.log log openvpn.log log-append openvpn.log verb 3
分号代表不会读取之后的内容。可以根据自己的需要将分号去掉。比如你还需要组建局域网打游戏,可以将
client-to-client前的分号去掉。
创建日志目录
$ sudo mkdir /var/log/openvpn/
编辑/etc/sysctl.conf
确保
net.ipv4.ip_forward=1
前面没有“#”,以及后面的数字是1
重新加载sysctl
$ sudo sysctl -p
接下来启动OpenVPN服务
$ docker run -itd \ -v /srv/docker/openvpn/:/etc/openvpn/:ro \ -v /var/log/openvpn:/var/log/openvpn \ --net=host \ --restart=always \ --privileged \ --name=openvpn \ --sysctl net.ipv6.conf.all.disable_ipv6=0 \ yangzhaofengsteven/docker-openvpn \ /usr/sbin/openvpn --cd /etc/openvpn/ --config server.conf
客户端的配置
读取服务器上的/srv/docker/openvpn/ca.crt,/srv/docker/openvpn/easy-rsa/keys/client1.crt和/srv/docker/openvpn/easy-rsa/keys/client1.key
本地的client1.ovpn里面这样写
client proto udp remote 你的服务器的公网IP 1194 nobind persist-key persist-tun dev myvpn dev-type tun <ca> ca.crt中的全部内容 </ca> <cert> client1.crt中的全部内容 </cert> <key> client1.key中的全部内容 </key>
这样客户端的配置文件就写好了。
iOS的用户请在此处下载OpenVPN客户端(需要非中国区的Apple ID)。
安卓的应用分为社区维护的版本和公司维护的版本。两个版本都是开源的。没有Google play的QB可以在这里下载社区版的OpenVPN应用。
使用模拟器的用户可以在这里找到Windows版OpenVPN的下载。
一键安装
如果你使用debian系统,我已经写好了一键安装的脚本
$ git clone https://github.com/yangzhaofeng/install-ovpn-sni-debian.git $ cd install-ovpn-sni-debian $ sudo ./install.bash
圆环记录攻略组