前言
自从公司配置了openvpn之后就可以在家里连到公司的内网,能访问部署在公司内网的项目。这让我对openvpn很感兴趣,于是我就开始查找相应的教程,并在寻找便宜的vps主机尝试搭建openvpn。我先后在华为云,腾讯云,搬瓦工上搭建了openvpn,不同的vps上搭建略有不同,但大体的原理是一样的。期间也遇到了不少坑,尝试搭建的过程大概花了一个多星期。在这里我想把搭建的过程以及遇到的问题纪录一下。
oepnvpn搭建
我使用过2种方式搭建过openvpn,一种是使用yum安装,另一种是通过docker-compose安装
yum方式安装
OpenVpn在默认的CentOS存储库中不可用。因此,我们需要安装Linux(EPEL)存储库。使用以下命令安装EPEL存储库
yum install epel-release
1. 安装openvpn
yum install openvpn -y
2. 安装Easy RSA
yum install easy-rsa -y
3. 配置openvpn
cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn
vi /etc/openvpn/server.conf
在编辑server.conf文件时要注意以下几个地方
|
|
log openvpn.log
这个配置可以看oepnvpn的启动和连接日志。我刚开始配置openvpn时没设置log,导致发生错误时不能准确找到错误原因,只能网上查错误的原因一个一个去尝试,效率非常低下。而有了log日志后出现问题就能比较准确定位了,比如;explicit-exit-notify 1
,原始配置中是没有;
的,启动openvpn时会报错,通过查看log日志能很快找到原因。个人觉得这个配置很重要,所以这里特别备注下。
4. 生成证书和秘钥
mkdir -p /etc/openvpn/easy-rsa/keys
cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa
vi /etc/openvpn/easy-rsa/vars
vars
中需要修改以下内容,
|
|
由于版本不可检测,OpenSSL配置可能无法加载。为了避免这种情况,从openSSl文件名中删除版本号。
cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf
接下来进行服务端证书生成
cd /etc/openvpn/easy-rsa
source ./vars
./clean-all
./build-ca
./build-key-server server
./build-dh
cd /etc/openvpn/easy-rsa/keys
cp dh2048.pem ca.crt server.crt server.key /etc/openvpn
客户端证书生成
cd /etc/openvpn/easy-rsa
./build-key client
5. 路由配置
安装iptables
yum install iptables-services -y
systemctl mask firewalld
systemctl enable iptables
systemctl stop firewalld
systemctl start iptables
iptables --flush
配置路由转发
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables-save > /etc/sysconfig/iptables
开启路由转发
vi /etc/sysctl.conf
在sysctl.conf
中增加net.ipv4.ip_forward = 1
重启网络服务
systemctl restart network.service
这一步很重要,如果网络服务重启失败,请排查原因。这里报错的话一般和网卡设置有关,在/etc/sysconfig/network-scripts
目录下查看网卡设置是否正确。参考centos7网卡配置
6. 启动openvpn
设为开机启动systemctl -f enable openvpn@server.service
启动openvpn
systemctl start openvpn@server.service
如果openvpn启动失败,请翻阅日志,日志默认在 /etc/openvpn
路径下
至此服务端配置完毕。
7. 配置客户端
在服务端找到以下文件
/etc/openvpn/easy-rsa/keys/ca.crt
/etc/openvpn/easy-rsa/keys/client.crt
/etc/openvpn/easy-rsa/keys/client.key
把这些文件拷贝到客户端openvpn的config目录下
创建一个.ovpn配置文件,配置文件如下。
|
|
要注意的是客户端的.ovpn文件与服务端的server.conf某些配置上需要保持一致,否则会连接失败。.ovpn也放到 openvpn的config目录下。
ca.crt,client.crt client.key与.opvn文件的集成:
在openvpn文件中使用<ca></ca>
,<cert></cert>
,<key></key>
标签,把对应的文件内容复制粘贴到标签当中去。
|
|
docker-compose方式安装
1.创建一个docker-compose.yml文件
|
|
2.初始化配置文件和安装证书
|
|
3. 启动openvpn
docker-compose up -d openvpn
4. 查看启动日志
docker-compose logs -f
5.生成客户端证书
|
|
6. 生成集成客户端.ovpn文件
docker-compose run --rm openvpn ovpn_getclient $CLIENTNAME > $CLIENTNAME.ovpn
搭建openvpn过程中遇到的那些坑
1.华为云上搭建好了openvpn,客户端一直连接不上。
原因: 华为云中有个安全策略设置,安全策略中1194端口没有开放,需要开放后才能连接。安全策略设置在华为云后台控制中设置
2. 搬瓦工vps中安装不了docker。
原因:
使用docker-compose方式安装openvpn需要先安装docker。搬瓦工采用openvz架构搭建,其linux内核版本为2.6.32-042stab120.18
,不可升级,而docker需要linux内核3.1以上,所以搬瓦工上不能安装docker,也不能使用docker-compose的方式安装openvpn。
3. 搬瓦工上openvpn连接上了,但不能上网。
原因: 转发失败,由于搬瓦工上一个网卡上有两个ip地址所致,默认转发到第一个ip地址上。
解决办法:
编辑转发配置文件
vi /etc/sysconfig/iptables
删除原来的转发规则
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
新增转发规则
-A POSTROUTING -s 10.8.0.0/24 -o venet0 -j SNAT --to-source your ip
保存后重启网络即可
systemctl restart network
结束语
openvpn搭建只要弄懂了它的实现原理,按照步骤一步步搭建,还是很容易成功。遇到问题先看日志,准确定位问题发生的环节,就能针对性解决问题。我在搭建过程中一般出现问题就是在转发规则配置的地方,不同的vps在这上面配置可能存在着差异,需要根据vps的实际情况进行配置。搭建openvpn中对于centos7中的网络配置这块内容也了解了不少,算是收获良多,搭建成功以后也是满满的成就感!在此把搭建过程和遇到过的问题纪录了下,方便以后查阅。
参考资料