OPENVPN介绍

第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 KEY_EMAIL=abc@163.com            # 管理员邮箱
 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 [abc@163.com]:

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]|OPENVPN介绍|leon的博客

图片[2]|OPENVPN介绍|leon的博客

图片[3]|OPENVPN介绍|leon的博客

图片[4]|OPENVPN介绍|leon的博客

图片[3]|OPENVPN介绍|leon的博客

图片[6]|OPENVPN介绍|leon的博客 图片[7]|OPENVPN介绍|leon的博客 图片[8]|OPENVPN介绍|leon的博客 图片[9]|OPENVPN介绍|leon的博客

1.2.2.3 复制客户端证书密钥和配置文件

将服务端打包的客户端相关配置文件解压到windows系统上,将压缩包内文件复制到C:\Program Files\My\OpenVPN\config目录下,并将client.windows.ovpn配置文件改名为client.ovpn。

1.2.2.4 启动客户端

图片[10]|OPENVPN介绍|leon的博客

1.2.2.5 测试连接

图片[11]|OPENVPN介绍|leon的博客

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
  • 命令说明:
  1. –daemon:openvpn以daemon方式启动
  2. –cd dir::配置文件的目录,openvpn初始化前先切换到此目录
  3. –config file:客户端配置文件的路径
  4. –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

 

温馨提示:本文最后更新于2022-12-20 20:57:54,已超过431天没有更新。某些文章具有时效性,若文章内容或图片资源有错误或已失效,请联系站长。谢谢!
转载请注明本文链接:https://blog.leonshadow.cn/763482/297.html
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享