安装阶段展开目录
1. 添加源展开目录
[root@openvpn ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
[root@openvpn ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@openvpn ~]# mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
[root@openvpn ~]# mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup
[root@openvpn ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
2. 安装 openvpn展开目录
[root@openvpn ~]# yum -y install openvpn easy-rsa
生成 openvpn 必备文件展开目录
如果你安装的 easy-rsa-3.0 的版本,生成证书步骤请参考这里,2.2 的请继续向下走,判断安装的 easy-rsa 版本看下图。
1. 生成证书展开目录
[root@openvpn ~]# cp -r /usr/share/easy-rsa/ /etc/openvpn/
[root@openvpn ~]# cd /etc/openvpn/easy-rsa/2.0/
[root@openvpn /etc/openvpn/easy-rsa/2.0]# source vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/2.0/keys
[root@openvpn /etc/openvpn/easy-rsa/2.0]# ./clean-all
[root@openvpn /etc/openvpn/easy-rsa/2.0]# ./build-ca
一路回车 y 即可
2. 生成服务器端证书和秘钥展开目录
[root@openvpn /etc/openvpn/easy-rsa/2.0]# ./build-key-server server
一路回车 Y 即可。
3. 生成客户端证书和密钥展开目录
[root@openvpn /etc/openvpn/easy-rsa/2.0]# ./build-key client
一路回车 Y
4. 生成 Diffie Hellman 参数展开目录
该生成的都生成了,下面开始编写配置文件
配置 OpenVPN 服务器端文件展开目录
编辑 / etc/openvpn/server.conf 文件,没有就手动创建,我的配置文件如下。如果是云服务器,尽量不要使用 upd 协议和 1194 端口,因为在国内很多接入商都不允许,导致 1194 端被封不能用。当然你也可以试一下,如果被封了就换一下。
local 192.168.1.168 #服务器IP
port 1194 #占用端口
proto udp #使用udp协议
dev tun #使用tun模式,也可以使用tap
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh2048.pem #指定证书位置
ifconfig-pool-persist /etc/openvpn/ipp.txt #存放每个人使用的IP
server 17.166.221.0 255.255.255.0 #客户端DHCP
push "route 192.168.1.0 255.255.255.0" #VPN访问网段,我的内网是192.168.1.0网段
push "redirect-gateway def1 bypass-dhcp" #所有流量都走VPN,如果不需要将下三行去掉
push "dhcp-option DNS 223.5.5.5" #DNS1
push "dhcp-option DNS 223.6.6.6" #DNS2
client-to-client #允许客户端之间互通
keepalive 20 120 #保持连接时间
comp-lzo #开启vpn压缩
#duplicate-cn #允许多人使用同一个证书连接VPN,不建议使用,注释状态
user openvpn #运行用户
group openvpn #运行组
persist-key
persist-tun
status openvpn-status.log
log-append openvpn.log
verb 1 #日志级别0-9,等级越高,记录越多
mute 20
启动 openvpn,看状态。展开目录
[root@openvpn ~]# systemctl start openvpn@server
[root@openvpn ~]# systemctl enable openvpn@server
Created symlink from /etc/systemd/system/multi-user.target.wants/openvpn@server.service to /usr/lib/systemd/system/openvpn@.service.
正常启动了,下面开始配置 iptables 及转发。
配置 iptables 及转发展开目录
关闭 firewall展开目录
[root@openvpn ~]# systemctl stop firewalld.service //停止服务
[root@openvpn ~]# systemctl disable firewalld.service //禁止开启动
[root@openvpn ~]# firewall-cmd --state //查看状态
安装 iptables,写入策略,开启 1194 及 22 端口展开目录
[root@openvpn ~]# yum -y install iptables iptables-services
[root@openvpn ~]# cat >>/etc/sysconfig/iptables<<OEF
> # Generated by iptables-save v1.4.7 on Fri Jul 7 17:16:42 2017
> *filter
> :INPUT ACCEPT [0:0]
> :FORWARD ACCEPT [0:0]
> :OUTPUT ACCEPT [90:10238]
> -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
> -A INPUT -p icmp -j ACCEPT
> -A INPUT -i lo -j ACCEPT
> -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
> -A INPUT -p udp -m state --state NEW -m udp --dport 1194 -j ACCEPT
> -A INPUT -j REJECT --reject-with icmp-host-prohibited
> -A FORWARD -j REJECT --reject-with icmp-host-prohibited
> COMMIT
> *nat
> :PREROUTING ACCEPT [37:5449]
> :POSTROUTING ACCEPT [0:0]
> :OUTPUT ACCEPT [0:0]
> COMMIT
> # Completed on Fri Jul 7 17:16:42 2017
> OEF
[root@openvpn ~]# systemctl restart iptables.service
[root@openvpn ~]# iptables -t nat -A POSTROUTING -s 17.166.221.0/24 -o ens192 -j MASQUERADE #NAT
开启转发展开目录
[root@openvpn ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@openvpn ~]# sysctl -p
服务端到此配置结束,生成证书开始连接。
客户端配置展开目录
1. 添加 openvpn 用户展开目录
使用 easy-rsa-3.0 的忽略这里撒,直接从编辑 client.ovpn 文件开始。
[root@openvpn ~]# cd /etc/openvpn/easy-rsa/2.0/
[root@openvpn /etc/openvpn/easy-rsa/2.0]# source vars
[root@openvpn /etc/openvpn/easy-rsa/2.0]# ./build-key dalin
[root@openvpn /etc/openvpn/easy-rsa/2.0]# sz keys/dalin.* #下载用户证书文件
[root@openvpn /etc/openvpn/easy-rsa/2.0]# sz keys/ca.* #下载CA
2. 编辑 client.ovpn 文件展开目录
client
proto udp
dev tun
remote 36.0.0.0 1194
ca ca.crt
cert dalin.crt
key dalin.key
resolv-retry infinite
nobind
mute-replay-warnings
keepalive 20 120
comp-lzo
user openvpn
group openvpn
persist-key
persist-tun
status openvpn-status.log
log-append openvpn.log
verb 3
mute 20
测试展开目录
emmmm,貌似没有可用的的测试服务器,用云服务器吧,试了一个 windows 的云服务器,死活连接不上,貌似是有限制,只好上 linux 了,但是遇到了点问题,连接是能连接上,ping 内网服务器不通,显示 Destination Host Prohibited,症状如下。
解决办法
修改 iptables 配置文件,这行去掉,重启 iptables 即可,修改之前记得保存一下 iptables 配置,上面貌似 NAT 那条木有保存。
#-A FORWARD -j REJECT --reject-with icmp-host-prohibited
我是直接复制 Centos6 的默认规则贴近来的,所以会有上面那条,如果你没有上面那条,配置没问题就可以正常使用了,不通的原因是因为 FORWARD 链中没有规则,所以 FORWORD 的数据包都被扔掉了,而且要添加我也不知道要怎么写,所以直接就注释了吧,哈哈,如果你的 vpn 服务器只是装 vpn,没有什么限制端口访问控制之类的东西直接将 iptables 的默认规则全清了把 NAT 贴进去就行了,最后的结果。
最后看看外网 IP,是不是公司的,telnet 了一下一个 2008 系统,可以通过,酱紫就可以了。