https://cdn.modb.pro/db/538461
我们设想这么一种场景,某公司总部设备VPP72使用专线接入互联网,具有公网IP地址;该公司分支设备VPP73使用普通网络,不具有公网IP地址,同时向总部设备建立穿越NAT设备的IPsec VPN隧道;同时有居家办公的员工使用openVPN接入公司网络,需要和分支的设备进行互通。
考虑到主要组件是openVPN和VPP,那我们姑且就将这种方案叫做openVPP方案吧!
openVPP的组网示意图和互访流量示意图如下:
这里面涉及的接口配置、IPsec配置、openVPN配置和NAT配置,我们前面都已经做过详细介绍,现在只要进行整合,即可实现网络互通。各部分配置如下:
我们计划使用VPP72的公网接口ETH1来接入openVPN用户,需要配置VPP和内核的互通(给VPP增加一个接口(非DPDK方式)),首先给eth1配置IP地址。
vppctl set int state eth1 up
vppctl set int ip address eth1 12.1.1.2/24
在内核创建一个veth接口,一端命名为ethvpp,另一端命名为ethhost。
ip link add name ethvpp type veth peer name ethhost
然后使能veth两端的接口ethhost@ethvpp和ethvpp@ethhost。
ip link set dev ethvpp up
ip link set dev ethhost up
接口UP起来之后,我们给内核中的ethhost接口分配一个IP地址。
ip addr add 172.16.1.1/24 dev ethhost
在VPP内也创建一个接口,来连接到ethvpp的主机接口。
vppctl create host-interface name ethvpp
然后手工使能接口host-ethvpp,并配置IP地址。
vppctl set interface state host-ethvpp up
vppctl set int ip address host-ethvpp 172.16.1.2/24
然后从内核中测试一下172.16.1.2的连通性。
首先在VPP72上同时安装openVPN和Easy-RSA(巧用openVPN实现访问云资源池业务),把/usr/share/easy-rsa/3.0.8/这个目录复制到/etc/openvpn/,同时复制一个机构配置文件到easyrsa所在的路径下。
yum install -y openvpn easy-rsa
cp -r usr/share/easy-rsa/3.0.8/ etc/openvpn/easyrsa3/
cp /usr/share/doc/easy-rsa-3.0.8/vars.example /etc/openvpn/easyrsa3/vars
修改vars文件中的机构信息字段,也可以直接添加。
set_var EASYRSA_REQ_COUNTRY "CN"
set_var EASYRSA_REQ_PROVINCE "Beijing"
set_var EASYRSA_REQ_CITY "Haidian"
set_var EASYRSA_REQ_ORG "TIETOU TECH"
set_var EASYRSA_REQ_EMAIL "tietou@h3cadmin.cn"
set_var EASYRSA_REQ_OU "Tietou openVPN"
切换到/etc/openvpn/easyrsa3/目录下,初始化PKI(Public Key Infrastructure,公钥基础设施)信息。(使用Easy-RSA配置生成SSL证书)
./easyrsa init-pki
创建根证书,用于CA(Certificate Authority,证书颁发机构)对之后生成的server和client证书签名时使用。使用nopass参数,不对CA密钥进行加密,这样在签署证书时就可以跳过密码验证。
./easyrsa build-ca nopass
创建服务器端证书,同样指定nopass参数,不对私钥进行加密。
./easyrsa gen-req tiejunge nopass
给服务器端证书tiejunge进行签名。
./easyrsa sign-req server tiejunge
然后创建Diffie-Hellman文件,也就是秘钥交换时的DH算法,确保密钥可以穿越不安全网络。生成时间比较长,请耐心等待生成结束。
./easyrsa gen-dh
接下来创建客户端的证书,同样指定nopass参数表示不对私钥进行加密。
./easyrsa gen-req tietouge nopass
给客户端证书tietouge进行签名。
./easyrsa sign-req client tietouge
梳理一下生成的证书信息,把服务器端的必要文件(ca.crt、dh.pem、tiejunge.crt、tiejunge.key)复制到/etc/openvpn/server/目录下。
cp /etc/openvpn/easyrsa3/pki/ca.crt /etc/openvpn/server/
cp /etc/openvpn/easyrsa3/pki/dh.pem /etc/openvpn/server/
cp /etc/openvpn/easyrsa3/pki/issued/tiejunge.crt /etc/openvpn/server/
cp /etc/openvpn/easyrsa3/pki/private/tiejunge.key /etc/openvpn/server/
把客户端的必要文件(ca.crt、tietouge.crt、tietouge.key)下载到本地。
在/etc/openvpn/server/目录下新建一个openVPN的配置文件server.conf,配置文件内容如下:
local 0.0.0.0
proto tcp
port 44331
dev tun
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/tiejunge.crt
key /etc/openvpn/server/tiejunge.key
dh /etc/openvpn/server/dh.pem
topology subnet
server 10.153.214.0 255.255.255.0
push "route 22.1.1.0 255.255.255.0"
duplicate-cn
keepalive 20 120
persist-key
persist-tun
使能Linux的内核转发,并开启主机的NAT功能。
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o ethhost -j MASQUERADE
创建openvpn服务的启动文件。
vi /etc/systemd/system/openvpn.service
[Unit]
Description=OpenVPN Server
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/server/server.conf
然后重新加载系统服务,启动openvpn服务并使能开机启动。
systemctl daemon-reload
systemctl start openvpn
systemctl enable openvpn
systemctl status openvpn
查看openVPN的端口监听状态:
ss -atnp |grep 44331
ss -atnp |grep openvpn
openVPN网关服务器运行状态正常。
我们要使用内核中的ethhost来作为openVPN的网关,接下来要在VPP中配置映射(VPP配置指南:NAT“三板斧”),将访问12.1.1.2的10086的流量映射到172.16.1.1。
vppctl set interface nat44 out eth1 output-feature
vppctl nat44 add interface address eth1
vppctl nat44 add identity mapping 12.1.1.2
vppctl nat44 add static mapping tcp local 172.16.1.1 44331 external 12.1.1.2 44331
vppctl nat44 add static mapping tcp local 172.16.1.1 44331 external eth1 44331
我们已经介绍过了Windows系统(openVPN连接操作指南)、Linux-CentOS系统(openVPN的Linux客户端竟然比Windows客户端性能高5倍不止)、macOS系统和Android系统(openVPN客户端配置之macOS、Android操作指南)的openVPN客户端安装,今天使用Linux-CentOS系统进行测试。
同样在客户端部署openVPN,使用其客户端角色进行配置,将前面生成的3个证书导入到/etc/openvpn/client/目录下。然后在同目录下,新建一个客户端配置文件tietouge.ovpn,内容如下所示:
client
dev tun
proto tcp
remote 12.1.1.2 44331
ca /etc/openvpn/client/ca.crt
cert /etc/openvpn/client/tietouge.crt
key /etc/openvpn/client/tietouge.key
nobind
resolv-retry infinite
persist-key
persist-tun
verb 4
再使用命令触发连接就可以了。
openvpn /etc/openvpn/client/tietouge.ovpn &
配置参考(VPP配置指南:穿越NAT的IPsec VPN配置及性能测试)。
vppctl ikev2 profile add openvpp
vppctl ikev2 profile set openvpp auth shared-key-mic string openvpp
vppctl ikev2 profile set openvpp id local ip4-addr 12.1.1.2
vppctl ikev2 profile set openvpp id remote fqdn vpp73
vppctl ikev2 profile set openvpp traffic-selector local ip-range 0.0.0.0 - 255.255.255.255 port-range 0 - 65535 protocol 0
vppctl ikev2 profile set openvpp traffic-selector remote ip-range 0.0.0.0 - 255.255.255.255 port-range 0 - 65535 protocol 0
vppctl set interface state ipip0 up
vppctl set interface ip address ipip0 120.1.1.1/24
vppctl ip route add 22.1.1.0/24 via 120.1.1.2 ipip0
vppctl set int state eth1 up
vppctl set int ip address eth1 13.1.1.3/24
vppctl set int state eth2 up
vppctl set int ip address eth2 22.1.1.1/24
vppctl ip route add 12.1.1.0/24 via 13.1.1.1
vppctl ikev2 profile add openvpp
vppctl ikev2 profile set openvpp auth shared-key-mic string openvpp
vppctl ikev2 profile set openvpp id local fqdn vpp73
vppctl ikev2 profile set openvpp id remote ip4-addr 12.1.1.2
vppctl ikev2 profile set openvpp traffic-selector local ip-range 0.0.0.0 - 255.255.255.255 port-range 0 - 65535 protocol 0
vppctl ikev2 profile set openvpp traffic-selector remote ip-range 0.0.0.0 - 255.255.255.255 port-range 0 - 65535 protocol 0
vppctl ikev2 profile set openvpp responder eth1 12.1.1.2
vppctl ikev2 profile set openvpp ike-crypto-alg aes-cbc 256 ike-integ-alg sha1-96 ike-dh modp-2048
vppctl ikev2 profile set openvpp esp-crypto-alg aes-cbc 256 esp-integ-alg sha1-96 esp-dh ecp-256
vppctl ikev2 profile set openvpp sa-lifetime 3600 10 5 0
vppctl ikev2 initiate sa-init openvpp
vppctl set interface state ipip0 up
vppctl set interface ip address ipip0 120.1.1.2/24
vppctl ip route add 172.16.1.0/24 via 120.1.1.1 ipip0
#
interface GigabitEthernet2/0
ip address 11.1.1.1 255.255.255.0
#
interface GigabitEthernet3/0
ip address 12.1.1.1 255.255.255.0
nat outbound
#
interface GigabitEthernet4/0
ip address 13.1.1.1 255.255.255.0
配置完成之后我们就可以测试从PCA到PCB的访问了。
可以看到,访问成功。但是中间有2跳没有显示,这里10.153.214.1的下一跳应该是VPP72的ethvpp接口,再下一跳是VPP73的120.1.1.2接口,最后是PCB主机。其实10.153.214.1和172.16.1.2应该算是1跳,毕竟是在一台设备上。
最后简单测试一下“openVPP”的性能如何。
最终测得带宽为600 Mbps,最高值为805 Mbps,结合之前openVPN测得的576 Mbps、IPsec VPN测得的1.69 Gbps的性能,瓶颈应该是在openVPN了。
本文链接:https://www.kinber.cn/post/3469.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝: