OpenVPN是一个开源应用程序,可以通过公共Internet创建一个专用网络。在我们开始之前,我们首先需要安装Enterprise Linux(EPEL)存储库的额外包。下面就是关于如何在CentOS 7上设置Client和OpenVPN服务器的教程。
1.安装EPEL套件库,顺道更新
# yum -y install epel-release && yum -y update
2.安装 OpenVPN
首先我们需要安装OpenVPN。我们还将安装Easy RSA来生成我们的SSL密钥对,这将保护我们的VPN连接。
# yum install -y openvpn easy-rsa
3.生成密钥及证书的前置条件
3.1.创建密钥与证书储存目录,并且准备好要产生密钥与证书的相关文件:
# mkdir -p /etc/openvpn/easy-rsa/keys # cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa # cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf3.2.修改凭证的默认资料,之后产生凭证时就会自动填写,不必再手动输入。
# vim /etc/openvpn/easy-rsa/vars所有凭证资料的预设值分别是:国家、省份、城市、组织、电子邮件位址、单位。
... export KEY_COUNTRY="CN" export KEY_PROVINCE="GD" export KEY_CITY="ZHUHAI" export KEY_ORG="YUNXI" export KEY_EMAIL="YUNXI@it.cn" export KEY_OU="IT YUNXI." ...上述参数的值可以自定义设置,对配置无影响。
4.Server 端密钥与证书生成
4.1.清除并删除 keys 目录下的所有 key
# cd /etc/openvpn/easy-rsa以下步骤列出需要清理的目录:
# source ./vars NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys# ./clean-all4.2.生成CA的密钥及凭证,设定值不需修改的话,可以直接按Enter使用vars档案里的预设值。
# ./build-ca4.3.生成 OpenVPN Server 端的密钥及凭证,同样可以使用vars档案的预设值。
注意:一直回车,直至最后有两次交互,输入 y 确认。
# ./build-key-server renwoleserver4.4.生成 Diffie Hellman 参数,这个步骤比较久,可能要跑大约 6 分钟左右。
# ./build-dh4.5.将Server的密钥及凭证放到主目录里:
# cd /etc/openvpn/easy-rsa/keys # cp dh2048.pem ca.crt renwoleserver.crt renwoleserver.key /etc/openvpn
5.生成 Client 端的密钥及凭证,文件名可以自定义,有两种方式,分别是:(一直回车即可)
5.1.生成不用输入密码的凭证:
# /etc/openvpn/easy-rsa/build-key renwoleusers
5.2.生成需要输入密码的凭证:
# /etc/openvpn/easy-rsa/build-key-pass renwoleusers
6.生成TLS-auth密钥(可选)
OpenVPN提供了TLS-auth功能,可以用来抵御Dos、UDP端口淹没攻击。出于安全考虑,你可以启用该功能;启用该功能,你需要执行以下命令:
# cd /etc/openvpn # openvpn --genkey --secret ta.key
6.目前我们总共产生了这些金钥及凭证:
# ll keys/ total 84 01.pem 02.pem renwoleserver.crt renwoleserver.csr renwoleserver.key renwoleusers.crt renwoleusers.csr renwoleusers.key ca.crt ca.key dh2048.pem index.txt index.txt.attr index.txt.attr.old index.txt.old serial serial.old
7.配置 OpenVPN server.conf
OpenVPN安装目录默认存在 server.conf 配置文件,我们拷贝一份并修改使用:
# cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn我们进入 /etc/openvpn/ 目录编辑 server.conf 文件。
配置完成后的内容如下:
# egrep -v "^$|^#|^;" server.conf local 10.10.204.62 port 1194 proto udp dev tun ca ca.crt cert renwoleserver.crt key renwoleserver.key # This file should be kept secret dh dh2048.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 223.5.5.5" client-to-client keepalive 10 120 tls-auth ta.key 0 # This file is secret cipher AES-256-CBC compress lz4-v2 push "compress lz4-v2" user nobody group nobody persist-key persist-tun #新增日志路径 status /var/log/openvpn-status.log log /var/log/openvpn.log verb 3 explicit-exit-notify 1
8.启动IP转发功能
# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf # sysctl -p
9.配置firewall转发规则
确保服务器可以转发数据包到服务器内外网,开启必要的通讯服务,并启用IP伪装(Masquerade)功能。
# firewall-cmd --permanent --add-service openvpn # firewall-cmd --permanent --add-masquerade # DEV=$(ip route get 223.5.5.5 | 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 # firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client openvpn ssh ports: protocols: masquerade: yes forward-ports: sourceports: icmp-blocks: rich rules:
10.启动 OpenVPN
重启网络与OpenVPN服务,并且让OpenVPN开机后自动启动:
# systemctl restart network # systemctl restart openvpn@server # systemctl enable openvpn@server
11.执行以下命令我们会看到一个新增的OpenVPN 专用网络:tun0
# ip a ... tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100 link/none inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0 valid_lft forever preferred_lft forever
12.Windows PC 客户端的配置
12.1.下载 openvpn 客户端并安装:Windows系统下安装,按照默认安装完成即可。
12.2.将Server端生成的Client密钥与证书下载到本地并放在 C:\Program Files\OpenVPN\config 目录下。
需要下载的文件列表:
/etc/openvpn/easy-rsa/keys/renwoleusers.crt /etc/openvpn/easy-rsa/keys/renwoleusers.key /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/ta.key12.3.将 C:\Program Files\OpenVPN\sample-config 下 client.ovpn 文件拷贝到 C:\Program Files\OpenVPN\config 目录。
client.ovpn 文件配置完成后的内容如下:
client dev tun ;proto tcp proto udp remote 10.10.204.62 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert renwoleusers.crt key renwoleusers.key remote-cert-tls server tls-auth ta.key 1 cipher AES-256-CBC verb 3
此时点击桌面上的 “OpenVPN GUI” 图标,如果不出意外即可连接成功,若连接报错,请查看分析 C:\Users\yunxi\OpenVPN\log\client.log 日志文件。
博主您好,
按照您的教程确实可以连上openvpn,但上网仍然是本地的网络,不是服务器IP,服务器上无法ping通内网的10.8.0.6,firewalld也开启转发了,可能还是防火墙设置问题吧。
”firewall-cmd –permanent –direct –passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o ens33 -j MASQUERADE“ 这句没错吧,但问题是,默认的public区域,interfaces为eth0, 应该要添加openvpn的tun0那块虚拟网卡吧。
另外参考了这篇文章,他的interfaces显示为ens33,不知是不要要使用:firewall-cmd –zone=public –add-interface=tun0(还是这里替换成ens33?)。
连上了openvpn,变成全局代理才对,就算设置错,也应该连接网页失败,但奇怪的地方就在于连上了,还是本地的网络访问,所以应该是哪里设置出问题,望博主不吝赐教。
File closed,问题已解决。
问题后来怎么解决的,我现在也遇到这个问题,能不能请教我下