第1章 OPENVPN部署
1.1 服务端部署
1.1.1 系统环境
[root@test ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@test ~]# uname -r 2.6.32-696.el6.x86_64 [root@test ~]# hostname -I 10.0.0.102 172.16.1.102
1.1.2 安装openvpn及相关依赖组件
[root@test ~]# yum install -y openvpn openvpn-devel lzo easy-rsa
1.1.3 制作证书
1.1.3.1 编辑证书默认配置文件
[root@test ~]# cd /usr/share/easy-rsa/2.0/ # 此处修改默认配置文件是为了方便之后证书制作过程的重复输入,此处也可不更改,等制作证书时再填写 [root@test 2.0]# vim ./vars 64 export KEY_COUNTRY="CN" # 国家代码 65 export KEY_PROVINCE="BeiJing" # 所在省 66 export KEY_CITY="BeiJing" # 所在市 67 export KEY_ORG="shadow.org" # 组织名称 68 export [email protected] # 管理员邮箱 69 export KEY_OU="shadow.org" # 部门
1.1.3.2 初始化环境变量
[root@test 2.0]# source ./vars # 可忽略此处提示 NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/share/easy-rsa/2.0/keys
1.1.3.3 清除keys目录下所有与证书相关的文件
[root@test 2.0]# ./clean-all
1.1.3.4 生成根证书ca.crt和根密钥ca.key
[root@test 2.0]# ./build-ca # 提示输入直接回车即可,如果没有更改默认配置文件,此处需按实际内容进行填写 Country Name (2 letter code) [CN]: State or Province Name (full name) [BeiJing]: Locality Name (eg, city) [BeiJing]: Organization Name (eg, company) [shadow.org]: Organizational Unit Name (eg, section) [shadow.org]: Common Name (eg, your name or your server's hostname) [client-linux]: Name [EasyRSA]: Email Address [[email protected]]:
1.1.3.5 为服务端生成证书和私钥
[root@test 2.0]# ./build-key-server server A challenge password []:123456 # 证书密码,此处可省略 An optional company name []:shadow.org # 可选的公司名称,此处可省略 Sign the certificate [y/n]:y 1 out of 1 certificate requests certified, commit [y/n]y
1.1.3.6 为每个客户端生成证书和私钥
# 制作windows客户端证书 [root@test 2.0]# ./build-key client-windows A challenge password []:123456 An optional company name []:shadow.org Sign the certificate [y/n]:y 1 out of 1 certificate requests certified, commit [y/n]y # 制作Linux客户端证书 [root@test 2.0]# ./build-key client-linux A challenge password []:123456 An optional company name []:shadow.org Sign the certificate [y/n]:y 1 out of 1 certificate requests certified, commit [y/n]y
提示:每一个登陆的VPN客户端都需要有一个证书,每个证书在同一时刻只能供一个客户端连接。
1.1.3.7 创建迪菲·赫尔曼密钥
[root@test 2.0]# ./build-dh # 该命令生成dh2048.pem文件,生成过程比较慢,在此期间不要去中断它
1.1.3.8 生成ta.key文件
[root@test 2.0]# openvpn --genkey --secret keys/ta.key # 防DDos攻击、UDP淹没等恶意攻击
1.1.3.9 查看生成的相关key文件
[root@test 2.0]# ll keys/ total 112 -rw-r--r-- 1 root root 5563 Oct 17 16:50 01.pem -rw-r--r-- 1 root root 5445 Oct 17 16:52 02.pem -rw-r--r-- 1 root root 5439 Oct 17 16:57 03.pem -rw-r--r-- 1 root root 1769 Oct 17 16:46 ca.crt -rw------- 1 root root 1704 Oct 17 16:46 ca.key -rw-r--r-- 1 root root 5439 Oct 17 16:57 client-linux.crt -rw-r--r-- 1 root root 1159 Oct 17 16:57 client-linux.csr -rw------- 1 root root 1704 Oct 17 16:57 client-linux.key -rw-r--r-- 1 root root 5445 Oct 17 16:52 client-windows.crt -rw-r--r-- 1 root root 1163 Oct 17 16:52 client-windows.csr -rw------- 1 root root 1704 Oct 17 16:52 client-windows.key -rw-r--r-- 1 root root 424 Oct 17 16:57 dh2048.pem -rw-r--r-- 1 root root 436 Oct 17 16:57 index.txt -rw-r--r-- 1 root root 21 Oct 17 16:57 index.txt.attr -rw-r--r-- 1 root root 21 Oct 17 16:52 index.txt.attr.old -rw-r--r-- 1 root root 292 Oct 17 16:52 index.txt.old -rw-r--r-- 1 root root 3 Oct 17 16:57 serial -rw-r--r-- 1 root root 3 Oct 17 16:52 serial.old -rw-r--r-- 1 root root 5563 Oct 17 16:50 server.crt -rw-r--r-- 1 root root 1163 Oct 17 16:49 server.csr -rw------- 1 root root 1704 Oct 17 16:49 server.key -rw------- 1 root root 636 Oct 17 16:58 ta.key
1.1.4 创建服务器端配置文件
1.1.4.1 创建keys目录
[root@test ~]# mkdir -p /etc/openvpn/keys
1.1.4.2 复制openvpn证书和密钥
[root@test ~]# cp /usr/share/easy-rsa/2.0/keys/{ca.crt,server.{crt,key},dh2048.pem,ta.key} /etc/openvpn/keys/
1.1.4.3 复制并精简服务端配置文件模板
[root@test ~]# cp /usr/share/doc/openvpn-2.4.3/sample/sample-config-files/server.conf /etc/openvpn/server.conf.bak [root@test ~]# egrep -v "^#|^$|^;" /etc/openvpn/server.conf.bak > /etc/openvpn/server.conf
1.1.4.4 制作服务端配置文件
[root@test openvpn]# vim server.conf port 1194 # openvpn使用的端口号 proto tcp # 改成tcp,默认使用udp,如果使用HTTP Proxy,必须使用tcp协议 dev tun # 路由模式,桥接模式用dev tap # 证书路径,在前面加keys即可,全路径为/etc/openvpn/keys/ca.crt ca keys/ca.crt cert keys/server.crt key keys/server.key # This file should be kept secret dh keys/dh2048.pem # 默认虚拟局域网网段,不要和实际的局域网冲突即可 # 路由模式,桥接模式用server-bridge server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt # 记录分配的IP push "route 172.16.1.0 255.255.255.0" # 设置内网IP网段 client-to-client # 允许客户端与客户端进行通信 # 如果客户端都使用相同的证书和密钥连接VPN,一定要打开这个选项,否则每个证书只允许一个人连接VPN,即让服务端支持同一个客户多次登录 duplicate-cn keepalive 10 120 # 每10秒询问在线,120秒无回应重新连接 tls-auth keys/ta.key 0 # This file is secret comp-lzo # lzo用于压缩通讯数据加快传输速度 cipher AES-256-CBC persist-key # 重新连接时不重新读取key persist-tun # 重新连接时不重新启用tun设备 status /var/log/openvpn-status.log # OpenVPN的状态日志,默认为/etc/openvpn/openvpn-status.log log-append /var/log/openvpn.log # OpenVPN的运行日志,默认为/etc/openvpn/openvpn.log verb 3 # 调试信息级别,改成verb 5可以多查看一些调试信息
1.1.5 配置内核转发和防火墙规则
1.1.5.1 配置内核转发
[root@test ~]# sed -i 's#net.ipv4.ip_forward = 0#net.ipv4.ip_forward = 1#g' /etc/sysctl.conf [root@test ~]# sysctl -p
1.1.5.2 配置防火墙规则
[root@test ~]# iptables -I INPUT -p tcp --dport 1194 -m comment --comment "openvpn" -j ACCEPT [root@test ~]# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE [root@test ~]# service iptables save # 保存防火墙配置
1.1.6 启动服务
[root@test ~]# chkconfig openvpn on [root@test ~]# service openvpn start
1.2 客户端配置
1.2.1 创建客户端配置文件
1.2.1.1 复制客户端证书和密钥
[root@test ~]# cp /usr/share/easy-rsa/2.0/keys/{client-windows.*,client-linux.*} /etc/openvpn/keys/
1.2.1.2 复制并精简服务端配置文件模板
[root@test ~]# cp /usr/share/doc/openvpn-2.4.3/sample/sample-config-files/client.conf /etc/openvpn/client.ovpn.bak [root@test ~]# egrep -v "^#|^$|^;" /etc/openvpn/client.ovpn.bak > /etc/openvpn/client.windows.ovpn [root@test ~]# egrep -v "^#|^$|^;" /etc/openvpn/client.ovpn.bak > /etc/openvpn/client.linux.ovpn
1.2.1.3 制作Windows客户端配置文件
[root@test ~]# vim /etc/openvpn/client.windows.ovpn client dev tun # 路由模式 proto tcp # 和服务端一致,改为tcp remote 10.0.0.102 1194 # 配置OpenVPN服务器的外网IP和端口 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client-windows.crt # client的证书 key client-windows.key # client的密钥 remote-cert-tls server tls-auth ta.key 1 comp-lzo cipher AES-256-CBC verb 3
1.2.1.4 制作Linux客户端配置文件
[root@test ~]# vim /etc/openvpn/client.linux.ovpn client dev tun proto tcp remote 10.0.0.102 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client-linux.crt key client-linux.key remote-cert-tls server tls-auth ta.key 1 comp-lzo cipher AES-256-CBC verb 3
1.2.1.5 打包客户端相关文件
[root@test ~]# cd /etc/openvpn/keys # 进入目录后打包可以不打包路径,方便以后解压使用 [root@test keys]# tar zcf client.openvpn.tar.gz client-windows.* ca.crt ta.key dh2048.pem client.windows.ovpn [root@test keys]# tar zcf client.linux.tar.gz client-linux.* ca.crt ta.key dh2048.pem client.linux.ovpn [root@_I openvpn]# ll *.tar.gz -rw-r--r-- 1 root root 6265 Oct 17 20:26 client.linux.tar.gz -rw-r--r-- 1 root root 6652 Oct 17 18:34 client.windows.tar.gz
1.2.2 Windows客户端配置
1.2.2.1 下载客户端
<a href="https://swupdate.openvpn.org/community/releases/">https://swupdate.openvpn.org/community/releases/</a>
选择和服务端相同的windows版本客户端(可能需要翻墙)。
1.2.2.2 安装客户端
1.2.2.3 复制客户端证书密钥和配置文件
将服务端打包的客户端相关配置文件解压到windows系统上,将压缩包内文件复制到C:\Program Files\My\OpenVPN\config目录下,并将client.windows.ovpn配置文件改名为client.ovpn。
1.2.2.4 启动客户端
1.2.2.5 测试连接
1.2.3 Linux客户端配置
1.2.3.1 安装openvpn客户端
[root@web01 ~]# yum install -y openvpn
1.2.3.2 解压相关配置文件到客户端
[root@web01 ~]# tar xf client.linux.tar.gz -C /etc/openvpn/
1.2.3.3 启动客户端程序
[root@web01 ~]# cd /etc/openvpn [root@web01 openvpn]# openvpn --daemon --cd /etc/openvpn --config client.ovpn --log-append /var/log/openvpn.log
- 命令说明:
- --daemon:openvpn以daemon方式启动
- --cd dir::配置文件的目录,openvpn初始化前先切换到此目录
- --config file:客户端配置文件的路径
- --log-append file:日志文件路径,如果文件不存在会自动创建
1.2.3.4 添加开机自启动
[root@web01 ~]# echo "openvpn --daemon --cd /etc/openvpn --config client.ovpn --log-append /var/log/openvpn.log" >> /etc/rc.local
1.2.3.5 检查测试结果
[root@web01 ~]# ping 172.16.1.90 PING 172.16.1.90 (172.16.1.90) 56(84) bytes of data. 64 bytes from 172.16.1.90: icmp_seq=1 ttl=128 time=1.64 ms 64 bytes from 172.16.1.90: icmp_seq=2 ttl=128 time=1.78 ms 64 bytes from 172.16.1.90: icmp_seq=3 ttl=128 time=2.22 ms 64 bytes from 172.16.1.90: icmp_seq=4 ttl=128 time=2.64 ms

我的微信
如果有技术上的问题可以扫一扫我的微信