OpenVPN概念
VPN,即Virtual Private Networking,虚拟专用网络,而OpenVPN则是一套能让不同局域网下的机器之间建立安全隧道的解决方案。
本文要讲什么
在CentOS7上安装和配置OpenVPN,涉及到的系统相关名词有rpm、yum、firewalld等。
配置服务端
CentOS7默认源里木有OpenVPN,所以我们首先要添加EPEL的源。
1
| rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
|
使用Yum安装OpenVPN和easy-rsa包(后者用于签发证书)
1
| yum install openvpn easy-rsa
|
为了防止升级easy-rsa
包时你的改动被覆盖掉,把生成证书的脚本拷贝到/etc/openvpn/easy-rsa/
目录。
1
| rsync -av /usr/share/easy-rsa/2.0/ /etc/openvpn/easy-rsa/
|
进入easy-rsa
目录并且根据你的需求编辑vars
文件
1 2
| cd /etc/openvpn/easy-rsa/ vim /etc/openvpn/easy-rsa/vars
|
1 2 3 4 5 6 7 8
| export KEY_COUNTRY="CN" export KEY_PROVINCE="BJ" export KEY_CITY="BeiJing" export KEY_ORG="Weformation LTD" export KEY_EMAIL="admin@cnwelee.me" export KEY_CN=cnwelee.me export KEY_NAME=server export KEY_OU=server
|
下面我们需要使用esay-rsa
目录下的脚本们来生成必要文件
调用vars
清空keys
目录
生成服务端证书和密钥
1
| ./build-key-server server
|
生成Diffie-Hellman 参数 .pem文件
生成第一个客户端密钥
重复这一步可以为每个需要连接本OpenVPN服务器的客户端生成密钥。
复制所有生成的服务器端文件到/etc/openvpn
目录
1
| cp /etc/openvpn/easy-rsa/keys/{dh2048.pem,ca.crt,server.crt,server.key} /etc/openvpn/
|
OpenVPN附带一个服务端配置示例文档,我们会以它为模板进行修改。首先把它拷过来:
1
| cp /usr/share/doc/openvpn-2.3.8/sample/sample-config-files/server.conf /etc/openvpn/
|
现在我们来编辑server.conf
文件,因为我们使用2048位的密钥所以我们修改dh dh1024.pem
为dh dh2048.pem
:
1
| sed -i 's/dh dh1024.pem/dh dh2048.pem/' /etc/openvpn/server.conf
|
为了让客户端的流量可以通过服务器,把redirect-gateway
选项的注释去掉
1
| sed -i '/redirect-gateway/s/^;//' /etc/openvpn/server.conf
|
推送DNS服务器到客户端(默认是OpenDNS):
1
| sed -i '/dhcp-option/s/^;//g' /etc/openvpn/server.conf
|
把user nobody
和group nobody
的注释去掉,这样可以以较少的权限运行OpenVPN
1
| sed -i '/nobody/s/^;//g' /etc/openvpn/server.conf
|
现在我们可以使用以下命令开启OpenVPN服务了
1
| systemctl start openvpn@server.service
|
使用以下命令让openvpn服务开机启动
1
| systemctl enable openvpn@server.service
|
通过VPN对客户端的流量(客户端想访问互联网)进行路由
服务端必须要开启IPv4包转发功能(服务器上多个网卡接口之间转发IPv4的包)。查看是否开启:
1
| cat /proc/sys/net/ipv4/ip_forward
|
如果输出是1则说明开启了,是0的话就运行以下命令进行开启
1 2
| echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p
|
下面我们配置防火墙规则
1 2 3 4 5 6
| firewall-cmd --permanent --add-service openvpn firewall-cmd --permanent --zone=trusted --add-interface=tun0 firewall-cmd --permanent --zone=trusted --add-masquerade DEV=$(ip route get 8.8.8.8 | awk 'NR==1 {print $(NF-2)}') firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $DEV -j MASQUERADE firewall-cmd --reload
|
配置客户端
无论你使用什么操作系统,都需要传输./build-key
脚本生成的client1.key
密钥和client1.crt
证书,以及证书签发机构认证的ca.crt
文件到客户机。你可以通过SSH使用SFTP\FTP或Rsync来传输。我们还需要创建一个client1.ovpn
文件,内容如下:
1 2 3
| ls **YOUR_SERVER_IP_ADDRESS** 1194 dev tunproto udpresolv-retry infinitenobindpersist-keypersist-tunverb 3 key client1.keyca ca.crtcert client1.crtcomp-lzo
|
Linux
安装最新版OpenVPN
1 2 3
| sudo yum install openvpn sudo apt-get install openvpn sudo pacman -S openvpn
|
创建一个新目录mkdir ~/.openvpn
并且把client1.ovpn
,client1.key
,client1.crt
和ca.crt
拷贝进去,使用如下命令开启OpenVPN服务
1
| sudo openvpn --config ~/.openvpn/client1.ovpn
|
注意这目录取决于你的Linux发行版本,你也可以通过GUI工具配置你的OpenVPN客户端。
Windows
下载并安装最新版客户端,把client1.ovpn
,client1.key
,client1.crt
和ca.crt
拷贝到C:\Program Files\OpenVPN\config
目录
Mac OS
下载并安装最新版本tunnelblick,拷贝client1.ovpn
,client1.key
,client1.crt
和ca.crt
到Downloads
目录.
打开应用并找到 “OpenVPN Configuration(s)” ,然后根据屏幕提示操作即可。
本文地址:
https://blog.welee.space/openvpn/