OpenVPN 跨机房互联 配置

一实验拓扑图:

二、操作环境介绍:
操作系统:Centos 7.4 最小化安装 4台
软件openvpn-2.4.6.tar.gz EasyRSA-3.0.1.tgz open-install-2.4.5-I601.exe
三、IP规划
主机名:shidc  ens33-->192.168.189.243  外网
               ens37-->192.168.217.230  内网
主机名:sh02   ens33-->192.168.217.231  内网服务器

主机名:cdidc  ens33-->192.168.189.244  外网
               ens37-->31.31.31.230     内网
主机名:cd02   ens33-->31.31.31.231     内网服务器

说明:由于是模拟环境,所以两边IDC,直接用同一段IP来模拟公网可以通信。
以上IP,子网掩码都是24位,shidc 和 cdidc 两台,内网卡(ens37)
不用配置网关,sh02 和 cd02 网关 217.1 和 31.1

四、实验环境准备:
4 台 Centos 7.4 最小化安装,自行操作。
五、安装OpenVPN (在 shidc 上操作)
5.1、安装依赖包
yum -y install gcc gcc-c++ openssl openssl-devel pam pam-devel
5.2、下载openvpn2.4.6 并安装。
mkdir -p /soft && cd /soft
wget https://files01.tchspt.com/temp/openvpn-2.4.6.tar.gz
tar zxf openvpn-2.4.6.tar.gz
cd openvpn-2.4.6/
./configure --prefix=/usr/local/openvpn --disable-lzo
make && make install
mkdir -p /etc/openvpn # 创建配置文件存放目录
拷贝配置文件
cp /soft/openvpn-2.4.6/sample/sample-config-files/server.conf /etc/openvpn/server.conf
创建软链接:
ln -s /usr/local/openvpn/sbin/openvpn /usr/local/sbin/openvpn
六下载证书软件,并配置。
6.1、下载软件,安装。
cd /soft
wget https://github.com/OpenVPN/easy-rsa/releases/download/3.0.1/EasyRSA-3.0.1.tgz
tar zxf EasyRSA-3.0.1.tgz
cp -rf EasyRSA-3.0.1 /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
cp vars.example vars
vim vars
添加如下内容,到文件最后:
set_var EASYRSA_REQ_COUNTRY "CN"
set_var EASYRSA_REQ_PROVINCE "BEIJING"
set_var EASYRSA_REQ_CITY "BEIJING"
set_var EASYRSA_REQ_ORG "DFSC"
set_var EASYRSA_REQ_EMAIL "331758730@qq.com"
set_var EASYRSA_REQ_OU "DFSC"



6.2、制作证书
cd /etc/openvpn/easy-rsa
./easyrsa init-pki #初始化证书目录



./easyrsa build-ca (本例CA证书密码为windows@123)# 创建CA证
书,提示输入Common Name,名称随意,但是不能和服务端证书或客户端证书名称相同



./easyrsa build-server-full server nopass #制作服务端证书



./easyrsa build-client-full xiaowang (密码设置为: xw.com123)
# xiaowang是客户端证书名称,可以根据不同的员工进行创建,名称唯一。



./easyrsa gen-dh # 生成Diffle Human参数,它能保证密钥在网络中安全传输



证书文件位置:


七、配置Openvpn ,并启动。
vim /etc/openvpn/server.conf
local 192.168.189.243
port 52115
proto tcp
dev tun
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server.crt
key /etc/openvpn/easy-rsa/pki/private/server.key
dh /etc/openvpn/easy-rsa/pki/dh.pem
server 10.8.0.0 255.255.255.0
push "route 192.168.217.0 255.255.255.0"
ifconfig-pool-persist ipp.txt
client-to-client
keepalive 10 120
cipher AES-256-CBC
persist-key
persist-tun
status /var/log/openvpn-status.log
log /var/log/openvpn.log
verb 3
compress lz4-v2
push "compress lz4-v2"
user nobody
group nobody
client-config-dir /etc/openvpn/ccd
route 31.31.31.0 255.255.255.0
配置文件内容说明:



mkdir -p /etc/openvpn/ccd
vim /etc/openvpn/ccd/xiaowang #客户端特殊配置文件名称,以客户端连接时
用的证书名称命名。添加如下内容:
iroute 31.31.31.0 255.255.255.0 #设置VPN Server到 VPN Client 内网路由。
开启路由转发:
echo "1" >/proc/sys/net/ipv4/ip_forward
echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf
sysctl -p

启动VPN服务:
/usr/local/sbin/openvpn --config /etc/openvpn/server.conf &



当Openvpn 启动成功后,会生成一块虚拟网卡tun0 ,vpn的数据就是通过它来实现传输。


查看路由表:
会生成一条去往cdidc 机房内网的一条路由,走的是VPN tun0 出去。


把openvpn启动,加入到rc.local
echo "/usr/local/sbin/openvpn --config /etc/openvpn/server.conf &" >>/etc/rc.local
chmod +x /etc/rc.local

八、Linux 客户端配置 (在cdidc 上面操作)
8.1、安装openvpn2.4.6
yum -y install gcc gcc-c++ openssl openssl-devel pam pam-devel
mkdir -p /soft && cd /soft
wget https://files01.tchspt.com/temp/openvpn-2.4.6.tar.gz
cd /soft/
tar zxf openvpn-2.4.6.tar.gz
cd openvpn-2.4.6/
./configure --prefix=/usr/local/openvpn --disable-lzo
make && make install
mkdir -p /etc/openvpn/ # 创建配置文件存放目录
cp /soft/openvpn-2.4.6/sample/sample-config-files/server.conf /etc/openvpn/sh.conf
创建软链接:
ln -s /usr/local/openvpn/sbin/openvpn /usr/local/sbin/openvpn
8.2、配置 vpnclient

先在VPN服务器上下载证书文件:


再把这些下载好的证书 文件,上传到/etc/openvpn/
cd /etc/openvpn


vim sh.conf
client
dev tun
proto tcp
remote 192.168.189.243 52115
persist-key
persist-tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/xiaowang.crt
key /etc/openvpn/xiaowang.key
verb 3



连接VPN服务器:
/usr/local/sbin/openvpn --config /etc/openvpn/sh.conf





查看路由表:


8.3、调试
路由跟踪
tracepath 192.168.217.231





这时,需要在 vpn服务器(shidc)上面开启NAT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ens37 -j SNAT --to-source 192.168.217.230
在VPN Server上收到的 VPN客户端,去往 内网服务器的数据包中的 Source IP (10.8.0.6)改成,自己(VPN Server 内网卡)的 IP 【192.168.217.230】
也可以使用:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
MASQUERADE :是用发送数据的网卡上的IP来替换源IP,因此,对于那些IP不固定的场合,比如拨号网络或者通过dhcp分配IP的情况下,就得用MASQUERADE





九、配置两边IDC机房,内网互通。
9.1、配置内网互通
在sh02 (shidc内网服务器)操作
添加去往cdidc内网的路由
route add -net 31.31.31.0/24 gw 192.168.217.230
查看路由表:

cd02(cdidc内网服务器)操作
添加去往shidc内网的路由
route add -net 192.168.217.0/24 gw 31.31.31.230
查看路由表:



进行ping 测试:




路由跟踪,看两段内网访问是否走VPN线路。




9.2、添加永久路由:
cd02上操作:
vim /etc/sysconfig/network-scripts/route-ens33
其中 ens33 应该是去往目标网段数据出去的网卡。


sh02上操作:
vim /etc/sysconfig/network-scripts/route-ens37



两种格式都可以。
需要重启network,生效。如果添加了临时路由,又添加了永久路由,可以先不用重启network,也可以。

十、Windows 客户端连接(可以用自己的物理机,也可以重新安装windows虚拟机,前提是必须要能和VPN 服务器相通。)
下载OpenVPN GUI客户端,64位下载地址:
http://build.openvpn.net/downloads/snapshots/openvpn-install-2.4.0-I602-pr80v18.exe
下载好后按默认设置安装即可。
vpn服务端创建一个客户端连接证书(jack),用于windows 客户端连接
cd /etc/openvpn/easy-rsa/ (在VPN服务器上操作)



将以下3个文件下载下来并放到C:\Program Files\OpenVPN\config目录下
/etc/openvpn/easy-rsa/pki/private/jack.key
/etc/openvpn/easy-rsa/pki/issued/jack.crt

/etc/openvpn/easy-rsa/pki/ca.crt


进入C:\Program Files\OpenVPN\config\client,创建以证书名称命名的ovpn,内容如下:
client
dev tun
proto tcp
remote 192.168.189.243 52115
persist-key
persist-tun
ca ca.crt
cert jack.crt
key jack.key
verb 3





双击桌面的OpenVPN GUI图标启动连接

 



 VPN图标变为绿色,表示,连接成功。

查看路由表:route print
生成了一条去往192.168.217.0(shidc内网)的路由,走的是VPN线路。


ping 测试:


路由跟踪:


VPN客户端互联,测试。


windows VPN 客户端,访问(cdidc内网服务器)31.31.31.231,测试
由于windows vpn 客户端,没有去往31.31.31.0路由,需要手动添加。



进行ping 测试,发现不通。


路由跟踪:


我们在cd02(cdidc内网服务器)上,进行抓包:


查看路由表:cd02 上


发现是cd02 上面没有去往10.8.0.0的路由,导致不通。
添加去往10.8.0.0网段路由。
route add -net 10.8.0.0/24 gw 31.31.31.230
再次查看路由表:cd02



再在windows vpn 客户端,进行ping测试。


再在windows vpn 客户端,路由跟踪。


cd02上操作:把去往10.8.0.0(VPN网段)路由设置成永久路由。
vim /etc/sysconfig/network-scripts/route-ens33
其中 ens33 应该是去往目标网段数据出去的网卡。


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

十一、回收证书:

当员工离职了,我们需要把证书回收。
在VPN服务器上操作:

cd /etc/openvpn/easy-rsa/
./easyrsa revoke jack


./easyrsa gen-crl




修改配置文件,文件的最后面,添加一行。

vim /etc/openvpn/server.conf


重启openvpn服务,这样回收的证书就连接不上VPN Server了。


/usr/local/sbin/openvpn --config /etc/openvpn/server.conf &
在windows客户端上,打开VPN,连接工具,重新连接,发现连接不上。



------------------------ END -------------------------------------