一、实验场景:

1、无公网IP和EIP(弹性公网IP)的ECS通过NAT网关设置SNAT(源地址转换)访问公网

2、无公网IP和EIP的ECS通过NAT网关设置DNAT(目标地址转换)向公网提供服务

3、相同地域、相同可用区、相同VPC(专有网络)的两台ECS,ECS1绑定EIP且自建NAT网关,ECS2无公网IP和EIP,通过ECS1访问公网并向公网提供服务

4、相同地域、不同可用区、不同VPC的两台ECS通过CEN(云企业网)互连

5、相同地域、不同可用区、不同VPC的两台ECS,ECS1绑定EIP且部署OpenXXX,ECS2无公网IP和EIP,本地通过ECS2的私有地址登录SSH,ECS2能访问公网并向公网提供服务

 

二、无公网IP和EIP(弹性公网IP)的ECS通过NAT网关设置SNAT(源地址转换)访问公网

1、原理:

阿里云VPC实验五则_ECS

2、创建VPC和交换机(对应子网):

阿里云VPC实验五则_DNAT_02

阿里云VPC实验五则_阿里云ACP_03

阿里云VPC实验五则_ECS_04

阿里云VPC实验五则_ECS_05

备注:系统会自动创建路由条目

阿里云VPC实验五则_SNAT_06

阿里云VPC实验五则_DNAT_07

3、创建ECS实例(可用区选择VPC所在的上海可用区E):

阿里云VPC实验五则_DNAT_08

阿里云VPC实验五则_阿里云ACP_09

阿里云VPC实验五则_DNAT_10

阿里云VPC实验五则_阿里云ACP_11

阿里云VPC实验五则_DNAT_12

阿里云VPC实验五则_阿里云ACP_13

阿里云VPC实验五则_VPC_14

4、创建EIP(用于绑定NAT网关):

阿里云VPC实验五则_DNAT_15

阿里云VPC实验五则_VPC_16

阿里云VPC实验五则_DNAT_17

阿里云VPC实验五则_阿里云ACP_18

5、创建NAT网关:

阿里云VPC实验五则_VPC_19

阿里云VPC实验五则_DNAT_20

阿里云VPC实验五则_ECS_21

6、NAT网关绑定EIP:

阿里云VPC实验五则_DNAT_22

阿里云VPC实验五则_ECS_23

阿里云VPC实验五则_阿里云ACP_24

7、设置SNAT前,ECS无法访问公网:

阿里云VPC实验五则_SNAT_25

阿里云VPC实验五则_VPC_26

阿里云VPC实验五则_DNAT_27

阿里云VPC实验五则_DNAT_28

8、设置SNAT:

阿里云VPC实验五则_DNAT_29

阿里云VPC实验五则_ECS_30

阿里云VPC实验五则_ECS_31

阿里云VPC实验五则_DNAT_32

备注:系统会自动创建路由条目,下一跳就是NAT网关

阿里云VPC实验五则_DNAT_33

9、设置SNAT后,ECS能访问公网:

阿里云VPC实验五则_阿里云ACP_34

 

三、无公网IP和EIP的ECS通过NAT网关设置DNAT(目标地址转换)向公网提供服务

1、原理:

阿里云VPC实验五则_DNAT_35

2、设置DNAT前,本地无法ping通ECS:

阿里云VPC实验五则_阿里云ACP_36

3、设置DNAT:

阿里云VPC实验五则_DNAT_37

阿里云VPC实验五则_DNAT_38

阿里云VPC实验五则_阿里云ACP_39

备注:将EIP的80端口映射到内网ECS的80端口

阿里云VPC实验五则_阿里云ACP_40

阿里云VPC实验五则_VPC_41

4、ECS部署Nginx服务,并在安全组入方向允许80/tcp端口:

阿里云VPC实验五则_DNAT_42

阿里云VPC实验五则_阿里云ACP_43

备注:ECS初始默认关闭firewalld和SELinux

5、设置DNAT后,本地能使用NAT网关绑定的EIP访问ECS部署的Nginx服务:

阿里云VPC实验五则_阿里云ACP_44

6、同理设置DNAT前,本地无法登录ECS的SSH:

阿里云VPC实验五则_DNAT_45

7、设置DNAT:

阿里云VPC实验五则_阿里云ACP_46

备注:将EIP的22端口映射到内网ECS的22端口

阿里云VPC实验五则_VPC_47

阿里云VPC实验五则_ECS_48

8、ECS安全组入方向默认已允许22/tcp端口:

阿里云VPC实验五则_SNAT_49

阿里云VPC实验五则_DNAT_50

9、设置DNAT后,本地能使用NAT网关绑定的EIP登录ECS的SSH:

阿里云VPC实验五则_VPC_51

 

四、相同地域、相同可用区、相同VPC(专有网络)的两台ECS,ECS1绑定EIP且自建NAT网关,ECS2无公网IP和EIP,通过ECS1访问公网并向公网提供服务

1、删除之前实验中配置的SNAT和DNAT条目

2、解绑NAT网关的EIP地址15.104.35

阿里云VPC实验五则_SNAT_52

阿里云VPC实验五则_阿里云ACP_53

3、删除NAT网关

4、恢复ECS安全组入方向默认规则

5、在上海可用区E中,创建一台ECS实例,使用和实例10.0.0.7相同的VPN和交换机

阿里云VPC实验五则_VPC_54

阿里云VPC实验五则_SNAT_55

6、修改两台ECS实例的描述信息用以区分,实例10.0.0.7为ECS1,实例10.0.0.9为ECS2

阿里云VPC实验五则_SNAT_56

7、ECS1绑定EIP地址106.15.104.35

阿里云VPC实验五则_ECS_57

阿里云VPC实验五则_SNAT_58

阿里云VPC实验五则_DNAT_59

阿里云VPC实验五则_VPC_60

阿里云VPC实验五则_DNAT_61

8、通过ECS1的EIP登录SSH,并开启ECS1的IP转发功能:

# ifconfig

阿里云VPC实验五则_ECS_62

# sysctl -p | grep "net.ipv4.ip_forward"
# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
# sysctl -p | grep "net.ipv4.ip_forward"

阿里云VPC实验五则_阿里云ACP_63

9、在VPC中添加一条自定义路由条目,目标网段0.0.0/0,下一跳类型指向绑定EIPECS1

阿里云VPC实验五则_DNAT_64

阿里云VPC实验五则_ECS_65

阿里云VPC实验五则_ECS_66

阿里云VPC实验五则_VPC_67

阿里云VPC实验五则_VPC_68

10、ECS1通过firewalld设置SNAT:

(1)CentOS 7:

# systemctl start firewalld
# systemctl enable firewalld
# firewall-cmd --state
# firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.0.0.0/8 -j SNAT --to-source 10.0.0.7
# firewall-cmd --reload

(2)CentOS 6:

# iptables -t nat -I POSTROUTING -s 10.0.0.0/8 -j SNAT --to-source 10.0.0.7
# service iptables save
# service iptables restart

备注:-s VPC网段,--to-source绑定EIP的ECS内网IP

阿里云VPC实验五则_阿里云ACP_69

11、设置SNAT后,ECS2能访问公网:

阿里云VPC实验五则_DNAT_70

12、ECS1通过firewalld设置DNAT:

(1)CentOS 7:

# systemctl start firewalld
# systemctl enable firewalld
# firewall-cmd --state
# firewall-cmd --add-masquerade --permanent
# firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 10.0.0.9
# firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -p tcp --dport 80 -j MASQUERADE
# firewall-cmd --reload

(2)CentOS 6:

# iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to 10.0.0.9
# iptables -t nat -I POSTROUTING -p tcp --dport 80 -j MASQUERADE
# service iptables save
# service iptables restart

备注:--dport绑定EIP的ECS需要映射的端口号,--to目标ECS的内网IP

13、ECS2部署Nginx服务,并在安全组入方向允许80/tcp端口

14、设置DNAT后,本地能使用ECS1绑定的EIP访问ECS2部署的Nginx服务:

阿里云VPC实验五则_阿里云ACP_71

 

五、相同地域、不同可用区、不同VPC的两台ECS通过CEN(云企业网)互连

1、删除之前实验中已添加的一条自定义路由条目,目标网段0.0.0.0/0,下一跳类型指向绑定EIP的ECS1

阿里云VPC实验五则_ECS_72

阿里云VPC实验五则_阿里云ACP_73

2、恢复ECS2安全组入方向默认规则

3、在上海可用区G中,创建VPC和交换机:

阿里云VPC实验五则_SNAT_74

4、同样在上海可用区G中,创建一台ECS实例,和ECS2相同地域、不同可用区、不同VPC,描述信息为ECS3

阿里云VPC实验五则_阿里云ACP_75

阿里云VPC实验五则_阿里云ACP_76

5、默认情况下ECS2和ECS3互相都ping不通:

阿里云VPC实验五则_ECS_77

阿里云VPC实验五则_阿里云ACP_78

6、创建CEN实例:

阿里云VPC实验五则_SNAT_79

阿里云VPC实验五则_VPC_80

阿里云VPC实验五则_SNAT_81

阿里云VPC实验五则_ECS_82

阿里云VPC实验五则_VPC_83

7、将专有网络2也加入同一个CEN:

阿里云VPC实验五则_SNAT_84

阿里云VPC实验五则_ECS_85

阿里云VPC实验五则_DNAT_86

阿里云VPC实验五则_VPC_87

阿里云VPC实验五则_VPC_88

8、将两个VPC加入同一个CEN后,ECS2和ECS3能互相ping通:

阿里云VPC实验五则_阿里云ACP_89

阿里云VPC实验五则_阿里云ACP_90

备注:两个VPCIP网段不能冲突,且ECS2ECS3安全组入方向都要允许ping(默认已允许全部ICMP

 

六、相同地域、不同可用区、不同VPC的两台ECS,ECS1绑定EIP且部署OpenXXX,ECS2无公网IP和EIP,本地通过ECS2的私有地址登录SSH,ECS2能访问公网并向公网提供服务

1、OpenXXX相关概念简介:

(1)OpenXXX:

       OpenXXX是一款用于创建虚拟专用网络加密通道的软件包。OpenXXX实现一个虚拟专用网(XXX)来创建一个安全连接,它大量使用了OpenSSL加密库中的SSLv3/TLSv1协议函数库。

(2)OpenXXX虚拟网卡:

       OpenXXX中的虚拟网卡是使用网络底层编程技术实现的一款驱动软件,安装软件后设备上会新增一块非真实的网卡,并可以像其它网卡一样进行配置。服务程序可以在应用层打开虚拟网卡,如果应用软件(如网络浏览器)向虚拟网卡发送数据,则服务程序可以读取到该数据。如果服务程序将合适的数据写入至虚拟网卡,应用软件也可以接收到。虚拟网卡在很多操作系统中都有相应的实现,这也是OpenXXX能跨平台使用的一个重要原因。

2、释放之前实验中无用的资源,修改ECS实例的描述信息用以区分,实例172.16.0.223为ECS1,实例10.0.0.9为ECS2,将EIP地址106.15.104.35绑定至ECS1

阿里云VPC实验五则_DNAT_91

备注:

(1)确认专有网络1和专有网络2已加入同一个CEN,ECS1和ECS2能互相ping通

(2)本地只能通过ECS1的EIP进行SSH登录,私有IP无法直接登录SSH

3、实验环境:

主机名

操作系统

私有IP

EIP

服务器角色

ecs1

CentOS 7.9

172.16.0.223

106.15.104.35

OpenXXX服务端、自建NAT网关

ecs2

CentOS 7.9

10.0.0.9

Nginx

centos

CentOS 7.9

192.168.0.122

本地OpenXXX客户端

Marion

Windows 10

192.168.0.100

本地OpenXXX客户端

4、ECS1部署OpenXXX服务端:

(1)ECS1安装epel源、openvpn和easy-rsa:

# yum -y install epel-release && yum -y install openvpn easy-rsa

(2)配置easy-rsa:

# mkdir -pv /etc/openvpn/easy-rsa/
# cp -a /usr/share/easy-rsa/3.0.8/* /etc/openvpn/easy-rsa/
# cp -a /usr/share/doc/easy-rsa-3.0.8/vars.example /etc/openvpn/easy-rsa/vars
# vim /etc/openvpn/easy-rsa/vars

取消设置并修改参数值:

set_var EASYRSA_DN               "cn_only"

set_var EASYRSA_REQ_COUNTRY   "CN"

set_var EASYRSA_REQ_PROVINCE  "Shanghai"

set_var EASYRSA_REQ_CITY        "Shanghai"

set_var EASYRSA_REQ_ORG        "Alibaba"

set_var EASYRSA_REQ_EMAIL      "834143808@qq.com"

set_var EASYRSA_REQ_OU          "Alibaba"

set_var EASYRSA_KEY_SIZE         2048

阿里云VPC实验五则_SNAT_92

(3)初始化pki目录:

# cd /etc/openvpn/easy-rsa
# ./easyrsa init-pki

阿里云VPC实验五则_SNAT_93

(4)创建CA证书:# ./easyrsa build-ca nopass

阿里云VPC实验五则_DNAT_94

备注:nopass表示不加密私钥文件

(5)创建Server端证书和密钥:# ./easyrsa build-server-full server nopass

阿里云VPC实验五则_ECS_95

(6)创建DH密钥:# ./easyrsa gen-dh

阿里云VPC实验五则_阿里云ACP_96

(7)创建TLS密钥:# openvpn --genkey --secret /etc/openvpn/easy-rsa/ta.key

(8)复制Server端文件:

# cp -a pki/ca.crt /etc/openvpn/server/
# cp -a pki/issued/server.crt /etc/openvpn/server/
# cp -a pki/private/server.key /etc/openvpn/server/
# cp -a pki/dh.pem /etc/openvpn/server/
# cp -a ta.key /etc/openvpn/server/
# ls /etc/openvpn/server

阿里云VPC实验五则_SNAT_97

(9)修改Server端配置文件:

# cp -p /usr/share/doc/openvpn-2.4.11/sample/sample-config-files/server.conf /etc/openvpn/server/
# cd /etc/openvpn/server
# cat /dev/null > server.conf
# vim server.conf

local 172.16.0.223

port 1194

proto udp

dev tun

ca /etc/openvpn/server/ca.crt

cert /etc/openvpn/server/server.crt

key /etc/openvpn/server/server.key

dh /etc/openvpn/server/dh.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"

push "dhcp-option DNS 223.6.6.6"

duplicate-cn

keepalive 10 120

tls-auth /etc/openvpn/server/ta.key 0

cipher AES-256-CBC

compress lz4-v2

push "compress lz4-v2"

max-clients 10

user nobody

group nobody

persist-key

persist-tun

status openvpn-status.log

log-append  /var/log/openvpn.log

verb 3

explicit-exit-notify 1

备注:

a、local 172.16.0.223:OpenXXX部署在ECS1上,此IP为ECS1的私有IP。

b、duplicate-cn:允许多个客户端同时使用相同的证书/密钥文件或通用名称连接。如果没有此选项,OpenXXX将在连接时使用相同的证书/密钥文件,且连接新客户端时会断开旧客户端连接。生产环境中每个客户端都应该有自己的证书/密钥文件。

(10)修改内核模块,开启IP转发功能:

# sysctl -p | grep "net.ipv4.ip_forward"
# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
# sysctl -p | grep "net.ipv4.ip_forward"

阿里云VPC实验五则_阿里云ACP_98

(11)OpenXXX服务端所在的ECS1安全组入方向允许1194/udp端口:

阿里云VPC实验五则_阿里云ACP_99

(12)启动OpenXXX并配置开机自启:

# systemctl start openvpn-server@server
# systemctl enable openvpn-server@server
# systemctl status openvpn-server@server
# ss -tunlp | grep openvpn

阿里云VPC实验五则_阿里云ACP_100

(13)查看ECS1自动分配的IP:# ip addr l

阿里云VPC实验五则_DNAT_101

(14)创建Client端证书和密钥:

# cd /etc/openvpn/easy-rsa
# ./easyrsa build-client-full qiuyue

阿里云VPC实验五则_阿里云ACP_102

备注:

a、设置的密码在连接OpenXXX服务端时需要输入

b、生成无密码的客户端证书:

# ./easyrsa build-client-full client nopass

c、多次执行上述命令可为多个用户创建证书:

# ./easyrsa build-client-full client01 nopass
# ./easyrsa build-client-full client02 nopass

(15)复制Client端文件:

# cp -a pki/ca.crt /etc/openvpn/client/
# cp -a pki/issued/qiuyue.crt /etc/openvpn/client/
# cp -a pki/private/qiuyue.key /etc/openvpn/client/
# cp -a ta.key /etc/openvpn/client/
# ls /etc/openvpn/client

阿里云VPC实验五则_SNAT_103

(16)修改Client端配置文件:

# cp -p /usr/share/doc/openvpn-2.4.11/sample/sample-config-files/client.conf /etc/openvpn/client/
# cd /etc/openvpn/client
# mv client.conf client.ovpn
# cat /dev/null > client.ovpn
# vim client.ovpn

client

dev tun

proto udp

remote 106.15.104.35

resolv-retry infinite

nobind

persist-key

persist-tun

ca ca.crt

cert qiuyue.crt

key qiuyue.key

remote-cert-tls server

tls-auth ta.key 1

cipher AES-256-CBC

verb 3

备注:remote 106.15.104.35,OpenXXX部署在ECS1上,此IP为ECS1的EIP

(17)将整个/etc/openxxx/client目录打包压缩传输至本地:

# cd /etc/openvpn
# tar -zcf vpnclient.tar.gz client/
# ls
# yum -y install lrzsz
# sz vpnclient.tar.gz

阿里云VPC实验五则_ECS_104

5、本地Windows 10部署OpenXXX客户端:

(1)下载客户端软件OpenXXX-2.5.3-I601-amd64.msi,地址http://www.npackd.org/p/openxxx64

(2)安装软件包,路径D:\OpenXXX

(3)解压传输至本地的tar.gz,将client目录下的所有文件复制至D:\OpenXXX\config目录

阿里云VPC实验五则_DNAT_105

(4)双击快捷方式:

阿里云VPC实验五则_VPC_106

(5)双击任务栏图标,运行OpenXXX GUI:

阿里云VPC实验五则_SNAT_107

(6)输入私钥密码:

阿里云VPC实验五则_VPC_108

阿里云VPC实验五则_ECS_109

阿里云VPC实验五则_VPC_110

(7)查看本地Windows 10自动分配的IP:C:\WINDOWS\system32>ipconfig

阿里云VPC实验五则_阿里云ACP_111

(8)本地Windows 10能通过ECS1的私有IP地址16.0.223登录SSH:

阿里云VPC实验五则_SNAT_112

备注:

a、本地Windows 10不能通过ECS2的私有IP地址0.0.9登录SSH

b、本地Windows 10运行OpenXXX GUI客户端后无法访问公网

c、ECS1和ECS2都关闭firewalld

6、ECS1配置防火墙:

(1)开启防火墙:

# systemctl start firewalld
# systemctl enable firewalld
# firewall-cmd --state

阿里云VPC实验五则_ECS_113

(2)防火墙新增OpenXXX相关规则:

# firewall-cmd --add-service=openvpn --permanent
# firewall-cmd --add-port=1194/udp --permanent
# firewall-cmd --add-interface=tun0 --permanent

(3)开启IP伪装:

# firewall-cmd --add-masquerade --permanent
# firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

(4)重载防火墙规则:

# firewall-cmd --reload
# firewall-cmd --list-all

阿里云VPC实验五则_SNAT_114
备注:

a、本地Windows 10能通过ECS2的私有IP地址0.0.9登录SSH

阿里云VPC实验五则_ECS_115

b、本地Windows 10运行OpenXXX GUI客户端的同时也能访问公网

c、ECS1已开启firewalld,并按上述步骤配置防火墙规则,ECS2仍关闭firewalld

7、本地CentOS 7.9部署OpenXXX客户端:

(1)部署前本地CentOS 7.9没有tun0虚拟网卡,也无法ping通ECS2的私有IP地址0.0.9:

# ip add l

阿里云VPC实验五则_DNAT_116

# ping 10.0.0.9

阿里云VPC实验五则_VPC_117

(2)安装OpenXXX客户端:# yum -y install epel-release && yum -y install openvpn lrzsz

(3)将之前从服务端传输至本地的tar.gz上传至本地CentOS 7.9:

# cd /etc/openvpn/client
# rz
# ls
# tar -xf vpnclient.tar.gz
# rm -rf vpnclient.tar.gz
# mv client/* .
# rm -rf client
# ls

阿里云VPC实验五则_VPC_118

(4)后台启动OpenXXX,需输入systemd-tty-ask-password-agent命令和服务端加密密钥123456

# openvpn --daemon --cd /etc/openvpn/client --config client.ovpn --log-append /var/log/openvpn.log

阿里云VPC实验五则_ECS_119

(5)查看OpenXXX进程:

# ps -ef | grep openvpn

阿里云VPC实验五则_SNAT_120

# ss -tunlp | grep openvpn

阿里云VPC实验五则_SNAT_121

(6)部署后本地CentOS 7.9自动生成tun0虚拟网卡,能ping通ECS2的私有IP地址0.0.9,并能访问公网:

# ip add l

阿里云VPC实验五则_DNAT_122

# ping -c 3 10.0.0.9

阿里云VPC实验五则_VPC_123

# ping -c 3 www.aliyun.com

阿里云VPC实验五则_阿里云ACP_124

8、无公网IP和EIP的ECS2通过ECS1的EIP访问公网:

(1)配置前ECS2无法直接访问公网:

阿里云VPC实验五则_ECS_125

(2)确认ECS1已开启IP转发功能:

# sysctl -p | grep "net.ipv4.ip_forward"

阿里云VPC实验五则_SNAT_126

备注:由于之前实验操作,此时ECS1对应VPC专有网络2,ECS2对应VPC专有网络1

(3)在VPC专有网络2中添加自定义路由条目,0.0.0.0/0,下一跳类型指向绑定EIPECS1

阿里云VPC实验五则_DNAT_127

阿里云VPC实验五则_DNAT_128

阿里云VPC实验五则_ECS_129

阿里云VPC实验五则_阿里云ACP_130

阿里云VPC实验五则_DNAT_131

(4)添加的自定义路由条目手动发布至CEN中:

阿里云VPC实验五则_ECS_132

(5)确保VPC专有网络1和专有网络2已加入同一个CEN:

阿里云VPC实验五则_ECS_133

阿里云VPC实验五则_阿里云ACP_134

阿里云VPC实验五则_DNAT_135

备注:VPC专有网络1中无需添加自定义路由条目

(6)ECS1通过firewalld设置SNAT:

# firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 172.16.0.0/12 -j SNAT --to-source 172.16.0.223
# firewall-cmd --reload

备注:-s VPC网段,--to-source绑定EIP的ECS1内网IP

阿里云VPC实验五则_SNAT_136

(7)配置后ECS2能访问公网:

阿里云VPC实验五则_VPC_137

9、无公网IP和EIP的ECS2通过ECS1的EIP向公网提供服务:

(1)ECS2部署Nginx服务

(2)ECS1ECS2都要在安全组入方向允许80/tcp端口

(3)配置前ECS2无法直接向公网提供服务:

阿里云VPC实验五则_阿里云ACP_138

(4)ECS1通过firewalld设置DNAT:

# firewall-cmd --add-masquerade --permanent
# firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 10.0.0.9
# firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -p tcp --dport 80 -j MASQUERADE
# firewall-cmd --reload

备注:--dport绑定EIP的ECS1需要映射的端口号,--to目标ECS2的内网IP

(5)配置后ECS2能向公网提供服务:

阿里云VPC实验五则_VPC_139