VPS OpenVPN 翻墙教程
服务端配置
首先,需要一台能访问外网的服务器。这里采用的是HostUS的VPS。
在部署OpenVPN服务端之前,应该先打开服务器的ip转发功能。修改/etc/sysctl.conf文件,将对应内容修改为下面一行的值:
net.ipv4.ip_forward = 1修改后执行sysctl -p /etc/sysctl.conf使配置生效。
服务端采用容器部署,因此VPS应该先安装好docker。以下为容器启动脚本:
#!/bin/bash
IP="xxx.xxx.xxx.xxx"
OVPN_DATA="/root/ovpn_data"
docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig -u udp://$IP
docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpki
docker run -v $OVPN_DATA:/etc/openvpn --name openvpn -e DEBUG=1 -d -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn
docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTNAME nopass
docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient CLIENTNAME > CLIENTNAME.ovpn将上述脚本的IP地址替换为自己的IP地址,然后执行脚本,根据提示输入信息即可。中间要求输入密码之类的都写个简单点一样的密码就好。
脚本执行完成后会生成一个CLIENTNAME.ovpn客户端的配置文件,将它下载到自己的电脑上,用于配置客户端。
客户端配置
这里的客户端也archlinux为例,要先安装好openvpn,在此不做赘述。客户端直接执行以下命令连接OpenVPN服务端:
sudo openvpn CLIENTNAME.ovpn如果日志输出有报错,可以查看服务端的配置文件,修改相应部分。启动好后进行测试:
ping -c 3 www.baidu.com
ping -c 3 www.google.com如果无法解析域名可能是DNS服务器没有设置好,查阅资料可知,openvpn客户端命令行不会从服务端拉取DNS设置。我们可以手动进行设置,在/etc/resolv.conf文件中第一行添加namespace 8.8.8.8,再次进行测试应该就可以解析域名了,用curl进行请求也能够请求成功了。
虽然可以翻墙了,但是如果你连着内网,要访问内网的服务,由于openvpn为了进行全局代理,修改了路由表,所有的流量都会走openvpn的路线,可能需要自己设置一下路由表。
sudo ip route add xxx.xxx.xxx/24 via xxx.xxx.xxx.xxx第一个ip地址是你要访问的内网网段,第二个ip地址是网关,你可以在openvpn客户端启动前用ip route list来查看网关信息。
以上就设置完了客户端和服务端的openvpn,现在既可以翻墙也可以连内网的服务,但是每次启动都要输入这么多命令比较麻烦,所以我们现在来整合一下。
openvpn service 配置
我们通过systemctl来控制openvpn,将CLIENTNAME.ovpn移动到/etc/openvpn/client/client.conf,在/etc/openvpn/client/文件夹下创建start.sh和stop.sh脚本:
start.sh:
#!/bin/bash
router-set(){
ip route add 192.0.6/24 via 192.72.19.254
ip route add 192.0.52/24 via 192.72.19.254
ip route add 192.79.21/24 via 192.72.19.254
}
dns-set(){
sed -i "/resolvconf/a \nameserver 8.8.8.8" /etc/resolv.conf
}
main(){
if netctl list | grep \* | grep -q Employ; then
router-set
fi
dns-set
echo start!
}
mainstop.sh:
#!/bin/bash
router-clear(){
ip route delete 192.0.6/24 via 192.72.19.254
ip route delete 192.0.52/24 via 192.72.19.254
ip route delete 192.79.21/24 via 192.72.19.254
}
dns-clear(){
sed -i "/ameserver 8.8.8.8/d" /etc/resolv.conf
}
main(){
if netctl list | grep \* | grep -q Employ; then
router-clear
fi
dns-clear
echo stop!
}
main为这两各脚本添加可执行权限:
sudo chmod +x *.sh在client.conf文件中添加以下内容:
script-security 2
up /etc/openvpn/client/start.sh
down /etc/openvpn/client/stop.sh以上内容使openvpn启动时执行start.sh,停止时执行stop.sh
现在可以使用sudo systemctl start openvpn-client@client.service和sudo systemctl stop openvpn-client@client.service来启动和停止openvpn服务。

