0%

需求:

云端机房有几台 ECS 做开发服务器,有 RDS 、MQ、ES、MongoDB、Nacos ,大家用spring cloud微服务做开发,为了保证大家顺利开发,需要在保证安全的情况下让大家可以随时连接云端组件。

方案:

1、买云服务商的vpn网关:花点钱的事情;

2、自己在ECS中安装vpn,每个开发人员接入vpn后开发。

下面主要讲第二种方案。

网络情况:

云端vpc的网段是10.0.0.0/24

服务器一:安装ES、MongoDb、Doris等组件;IP:10.0.0.11

服务器二:安装nacos、redis、docker服务;IP:10.0.0.10

服务器三:docker服务;IP:10.0.0.12

计划:

1、在服务器一上安装openvpn,接入客户端的ip段规划为10.8.0.0/24,让所有vpn接入的客户端可以直接访问服务器二、三;

2、服务器一、二、三上可以直接连通所有vpn接入的客户端;

3、vpn接入的客户端可以连通服务器二、三上的docker容器中的服务;

1是 openvpn的基本功能;

2需要在openvpn 服务端给vpn客户端推送路由信息;

3需要服务器二三上需要被访问的docker容器接入直接的docker network,然后在openvpn服务端给vpn客户端推送到每个docker network的路由。

先处理docker network

在服务器二、服务器三分别创建单独的docker network:

服务器二: docker network create --subnet=10.10.0.0/24 cem-network

服务器三:docker network create --subnet=10.12.0.0/24 cem-network

然后这两个服务器中需要被vpn客户端访问的容器都需要创建在cem-network中。

安装openvpn服务

先启动防火墙,需要防火墙做转发(也可以用iptables,这个最近这些年很少用了)

1
2
sudo systemctl enable firewalld
sudo systemctl start firewalld

安装openvpn软件

1
2
3
4
5
6
7
8
yum -y install epel-release
yum install openvpn
wget https://github.com/OpenVPN/easy-rsa-old/archive/2.3.3.tar.gz
tar xfz 2.3.3.tar.gz
mkdir /etc/openvpn/easy-rsa
cp -rf easy-rsa-old-2.3.3/easy-rsa/2.0/* /etc/openvpn/easy-rsa
cp /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/server.conf /etc/openvpn

需改/etc/openvpn/server.conf配置文件,大致需要修改如下几点:

然后在openvpn配制中增加到10.10.0.0/24的路由。

1
2
3
4
5
6
7
8
9
10
11
12
13
client-to-client
#下面这行注释掉
;tls-auth ta.key 0
#添加这个
tls-crypt myvpn.tlsauth

#添加到云端服务器的路由
#所有 10.0.0/24的都通过openvpn服务器来访问
push "route 10.0.0.0 255.255.255.0"
#访问10.10.0/24 容器的都通过10.0.0.10来路由
push "route 10.10.0.0 255.255.255.0 10.0.0.10 1"
#访问10.12.0/24 容器的都通过10.0.0.12来路由
push "route 10.12.0.0 255.255.255.0 10.0.0.12 1"
1
2
3
4
5
6
7
8
9
10
11
12
13
openvpn --genkey --secret /etc/openvpn/myvpn.tlsauth
mkdir /etc/openvpn/easy-rsa/keys
cd /etc/openvpn/easy-rsa
source ./vars
./clean-all
./build-ca
./build-key-server server
./build-dh
cd /etc/openvpn/easy-rsa/keys
cp dh2048.pem ca.crt server.crt server.key /etc/openvpn
cd /etc/openvpn/easy-rsa

./build-key wanghongxing

然后修改防火墙配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18


firewall-cmd --zone=public --add-port=1194/tcp --permanent
firewall-cmd --zone=public --add-port=1194/udp --permanent
firewall-cmd --zone=trusted --add-service openvpn --permanent

firewall-cmd --list-services --zone=trusted
firewall-cmd --add-masquerade
firewall-cmd --permanent --add-masquerade
firewall-cmd --query-masquerade
firewall-cmd --permanent --add-interface=tun0
firewall-cmd --permanent --add-service=openvpn
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
firewall-cmd --reload

echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf
systemctl restart openvpn@server.service

制作vpn客户端文件

把 下面这几个文件复制下载到客户端电脑

1
2
3
4
5
/etc/openvpn/ca.crt 
/etc/openvpn/myvpn.tlsauth
/etc/openvpn/easy-rsa/keys/wanghongxing.crt
/etc/openvpn/easy-rsa/keys/wanghongxing.csr
/etc/openvpn/easy-rsa/keys/wanghongxing.key

然后编辑生成 whx.ovpn

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
client
dev tun
proto udp
remote 114.116.201.xxx
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert wanghongxing.crt
key wanghongxing.key
remote-cert-tls server
tls-crypt myvpn.tlsauth
verb 3

下载openvpn客户端

mac用户下载 Tunnelblick ,windows用户下载.

然后倒入whx.ovpn

在服务器二三设置路由

其服务器二三设置访问vpn客户端的路由

1
2
3
4
ip route add 10.8.0.0/24 via 10.0.0.11 dev eth0
#这样以后重启了也有效
echo "10.8.0.0/24 via 10.0.0.11 dev eth0" >> /etc/sysconfig/network-scripts/route-eth0

在服务器二设置访问服务器三容器的路由

1
2
ip route add 10.12.0.0/24 via 10.0.0.12 dev eth0
echo "10.12.0.0/24 via 10.0.0.12 dev eth0" >> /etc/sysconfig/network-scripts/route-eth0

在服务器三设置访问服务器二容器的路由

1
2
ip route add 10.10.0.0/24 via 10.0.0.10 dev eth0
echo "10.10.0.0/24 via 10.0.0.10 dev eth0" >> /etc/sysconfig/network-scripts/route-eth0

在服务器一设置访问服务器二三容器的路由

1
2
3
4
5
ip route add 10.12.0.0/24 via 10.0.0.12 dev eth0
ip route add 10.10.0.0/24 via 10.0.0.10 dev eth0
echo "10.12.0.0/24 via 10.0.0.12 dev eth0" >> /etc/sysconfig/network-scripts/route-eth0
echo "10.10.0.0/24 via 10.0.0.10 dev eth0" >> /etc/sysconfig/network-scripts/route-eth0

ip route add 172.18.0.0/24 via 10.0.0.10 dev eth0

1
2
3
4
5
6
7
8
9
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=8848/tcp --permanent
firewall-cmd --zone=public --add-port=9848/tcp --permanent
firewall-cmd --permanent --zone=trusted --change-interface=docker0

firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --zone=public --add-port=9876/tcp --permanent

docker network create –subnet=10.10.0.0/24 cem-network

linux中手动添加路由的方法:

ip route add 10.10.0.0/24 via 10.0.0.10 dev eth0

macos中手动添加路由的方法:

1
sudo route -n add -net 10.10.0.0/24 10.0.0.10

为了让spring cloud微服务注册到nacos的时候使用特定ip段,需要在bootstrap中设置 preferred-networks ,比如内网用户设置为:

1
2
3
4
5
6
spring:
cloud:
inetutils:
preferred-networks:
- 10.8

比如cem容器中设置为:

1
2
3
4
5
spring:
cloud:
inetutils:
preferred-networks:
- 10.10