参考:
安装
1.安装 openvpn、easy-rsa、iptables-services
1 2
| yum -y install epel-release yum -y install openvpn easy-rsa iptables-services |
配置
证书
2.使用 easy-rsa 生成需要的证书及相关文件,在这个阶段会产生一些 key 和证书:
- CA 根证书
- OpenVPN 服务器 ssl 证书
- Diffie-Hellman 算法用到的 key
2.1 将 easy-rsa 脚本复制到 /etc/openvpn/,该脚本主要用来方便地生成 CA 证书和各种 key
1
| cp -r /usr/share/easy-rsa/ /etc/openvpn/
|
2.2 跳到 easy-rsa 目录并编辑 vars 文件,添加一些生成证书时用到的变量
1 2 3 4 5 6 7 8
| cd /etc/openvpn/easy-rsa/<easy-rsa 版本号>/ # 查看 easy-rsa 版本号:yum info easy-rsa vim vars # 没这个文件的话新建,填写如下内容(变量值根据实际情况随便填写): export KEY_COUNTRY="***" export KEY_PROVINCE="***" export KEY_CITY="***" export KEY_ORG="***" export KEY_EMAIL="***" source ./vars # 使变量生效
|
2.3 生成 CA 根证书
1 2
| ./easyrsa init-pki ./easyrsa build-ca nopass
|
2.4 生成 OpenVPN 服务器证书和密钥
第一个参数 server 为证书名称,可以随便起,比如 ./easyrsa build-server-full openvpn nopass
1
| ./easyrsa build-server-full server nopass
|
2.5 生成 Diffie-Hellman 算法需要的密钥文件
2.6 生成 tls-auth key,这个 key 主要用于防止 DoS 和 TLS 攻击,这一步其实是可选的,但为了安全还是生成一下,该文件在后面配置 open VPN 时会用到。
2.7 将上面生成的相关证书文件整理到 /etc/openvpn/server/certs (这一步完全是为了维护方便)
1 2 3 4 5 6
| mkdir /etc/openvpn/server/certs && cd /etc/openvpn/server/certs/ cp /etc/openvpn/easy-rsa/3/pki/dh.pem ./ # SSL 协商时 Diffie-Hellman 算法需要的 key cp /etc/openvpn/easy-rsa/3/pki/ca.crt ./ # CA 根证书 cp /etc/openvpn/easy-rsa/3/pki/issued/server.crt ./ # open VPN 服务器证书 cp /etc/openvpn/easy-rsa/3/pki/private/server.key ./ # open VPN 服务器证书 key cp /etc/openvpn/easy-rsa/3/ta.key ./ # tls-auth key |
配置系统
2.8 创建 open VPN 日志目录
1 2
| mkdir -p /var/log/openvpn/ chown openvpn:openvpn /var/log/openvpn
|
3.配置 OpenVPN
可以从 /usr/share/doc/openvpn-/sample/sample-config-files 复制一份 demo 到 /etc/openvpn/(openvpn 版本号查看:yum info openvpn。)然后改改,或者从头开始创建一个新的配置文件。我选择新建配置:
cd /etc/openvpn/
vim server.conf 填入如下内容(很多配置项不需要特别了解,重要的配置这里注释出来了,其他相关配置项想了解的话见 这里):
server.conf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| port 1194 # 监听的端口号 proto udp # 服务端用的协议,udp 能快点,所以我选择 udp dev tun ca /etc/openvpn/server/certs/ca.crt # CA 根证书路径 cert /etc/openvpn/server/certs/server.crt # open VPN 服务器证书路径 key /etc/openvpn/server/certs/server.key # open VPN 服务器密钥路径,This file should be kept secret dh /etc/openvpn/server/certs/dh.pem # Diffie-Hellman 算法密钥文件路径 tls-auth /etc/openvpn/server/certs/ta.key 0 # tls-auth key,参数 0 可以省略,如果不省略,那么客户端
server 10.8.0.0 255.255.255.0 # 该网段为 open VPN 虚拟网卡网段,不要和内网网段冲突即可。open VPN 默认为 10.8.0.0/24 push "dhcp-option DNS 8.8.8.8" # DNS 服务器配置,可以根据需要指定其他 ns push "dhcp-option DNS 8.8.4.4" push "redirect-gateway def1" # 客户端所有流量都通过 open VPN 转发,类似于代理开全局 compress lzo duplicate-cn # 允许一个用户多个终端连接 keepalive 10 120 comp-lzo persist-key persist-tun user openvpn # open VPN 进程启动用户,openvpn 用户在安装完 openvpn 后就自动生成了 group openvpn log /var/log/openvpn/server.log # 指定 log 文件位置 log-append /var/log/openvpn/server.log status /var/log/openvpn/status.log verb 3 explicit-exit-notify 1
|
4.防火墙相关配置(使用 iptables 添加 snat 规则)
4.1 禁用 Centos7 默认的 firewalld,使用经典的 iptables 防火墙管理软件:
1 2
| systemctl stop firewalld systemctl mask firewalld
|
4.2 禁用 SELinux
马上关闭:setenforce 0 | 马上生效
永久关闭:sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config | 需要重启服务器生效
4.3 启用iptables
1 2 3
| systemctl enable iptables systemctl start iptables iptables -F
|
4.4 添加防火墙规则,将 openvpn 的网络流量转发到公网:snat 规则
1 2
| iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE iptables-save > /etc/sysconfig/iptables # iptables 规则持久化保存
|
4.5 Linux 服务器启用地址转发
1 2
| echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf sysctl -p
|
5.启动 open VPN
1 2 3
| systemctl start openvpn@server systemctl enable openvpn@server systemctl status openvpn@server |
没有评论:
发表评论