知识的领域是无限的,我们的学习也是无限期的。这篇文章主要讲述阿里云VPC实验五则相关的知识,希望能为你提供帮助。
一、实验场景:
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、原理:
文章图片
2、创建VPC和交换机(对应子网):
文章图片
文章图片
文章图片
文章图片
备注:系统会自动创建路由条目
文章图片
文章图片
3、创建ECS实例(可用区选择VPC所在的上海可用区E):
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
4、创建EIP(用于绑定NAT网关):
文章图片
文章图片
文章图片
文章图片
5、创建NAT网关:
文章图片
文章图片
文章图片
6、NAT网关绑定EIP:
文章图片
文章图片
文章图片
7、设置SNAT前,ECS无法访问公网:
文章图片
文章图片
文章图片
文章图片
8、设置SNAT:
文章图片
文章图片
文章图片
文章图片
备注:系统会自动创建路由条目,下一跳就是NAT网关
文章图片
9、设置SNAT后,ECS能访问公网:
文章图片
三、无公网IP和EIP的ECS通过NAT网关设置DNAT(目标地址转换)向公网提供服务
1、原理:
文章图片
2、设置DNAT前,本地无法ping通ECS:
文章图片
3、设置DNAT:
文章图片
文章图片
文章图片
备注:将EIP的80端口映射到内网ECS的80端口
文章图片
文章图片
4、ECS部署nginx服务,并在安全组入方向允许80/tcp端口:
文章图片
文章图片
备注:ECS初始默认关闭firewalld和SELinux
5、设置DNAT后,本地能使用NAT网关绑定的EIP访问ECS部署的Nginx服务:
文章图片
6、同理设置DNAT前,本地无法登录ECS的SSH:
文章图片
7、设置DNAT:
文章图片
备注:将EIP的22端口映射到内网ECS的22端口
文章图片
文章图片
8、ECS安全组入方向默认已允许22/tcp端口:
文章图片
文章图片
9、设置DNAT后,本地能使用NAT网关绑定的EIP登录ECS的SSH:
文章图片
四、相同地域、相同可用区、相同VPC(专有网络)的两台ECS,ECS1绑定EIP且自建NAT网关,ECS2无公网IP和EIP,通过ECS1访问公网并向公网提供服务
1、删除之前实验中配置的SNAT和DNAT条目
2、解绑NAT网关的EIP地址15.104.35
文章图片
文章图片
3、删除NAT网关
4、恢复ECS安全组入方向默认规则
5、在上海可用区E中,创建一台ECS实例,使用和实例10.0.0.7相同的VPN和交换机
文章图片
文章图片
6、修改两台ECS实例的描述信息用以区分,实例10.0.0.7为ECS1,实例10.0.0.9为ECS2
文章图片
7、ECS1绑定EIP地址106.15.104.35
文章图片
文章图片
文章图片
文章图片
文章图片
8、通过ECS1的EIP登录SSH,并开启ECS1的IP转发功能:
# ifconfig
文章图片
# sysctl -p | grep "net.ipv4.ip_forward"
# echo "net.ipv4.ip_forward = 1" >
>
/etc/sysctl.conf
# sysctl -p | grep "net.ipv4.ip_forward"
文章图片
9、在VPC中添加一条自定义路由条目,目标网段0.0.0/0,下一跳类型指向绑定EIP的ECS1:
文章图片
文章图片
文章图片
文章图片
文章图片
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
文章图片
11、设置SNAT后,ECS2能访问公网:
文章图片
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的两台ECS通过CEN(云企业网)互连
1、删除之前实验中已添加的一条自定义路由条目,目标网段0.0.0.0/0,下一跳类型指向绑定EIP的ECS1
文章图片
文章图片
2、恢复ECS2安全组入方向默认规则
3、在上海可用区G中,创建VPC和交换机:
文章图片
4、同样在上海可用区G中,创建一台ECS实例,和ECS2相同地域、不同可用区、不同VPC,描述信息为ECS3
文章图片
文章图片
5、默认情况下ECS2和ECS3互相都ping不通:
文章图片
文章图片
6、创建CEN实例:
文章图片
文章图片
文章图片
文章图片
文章图片
7、将专有网络2也加入同一个CEN:
文章图片
文章图片
文章图片
文章图片
文章图片
8、将两个VPC加入同一个CEN后,ECS2和ECS3能互相ping通:
文章图片
文章图片
备注:两个VPC的IP网段不能冲突,且ECS2和ECS3安全组入方向都要允许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
文章图片
备注:
(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客户端 |
(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_SIZE2048
文章图片
(3)初始化pki目录:
# cd /etc/openvpn/easy-rsa
# ./easyrsa init-pki
文章图片
(4)创建CA证书:# ./easyrsa build-ca nopass
文章图片
备注:nopass表示不加密私钥文件
(5)创建Server端证书和密钥:# ./easyrsa build-server-full server nopass
文章图片
(6)创建DH密钥:# ./easyrsa gen-dh
文章图片
(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
文章图片
(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"
文章图片
(11)OpenXXX服务端所在的ECS1安全组入方向允许1194/udp端口:
文章图片
(12)启动OpenXXX并配置开机自启:
# systemctl start openvpn-server@server
# systemctl enable openvpn-server@server
# systemctl status openvpn-server@server
# ss -tunlp | grep openvpn
文章图片
(13)查看ECS1自动分配的IP:# ip addr l
文章图片
(14)创建Client端证书和密钥:
# cd /etc/openvpn/easy-rsa
# ./easyrsa build-client-full qiuyue
文章图片
备注:
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
文章图片
(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
文章图片
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目录
文章图片
(4)双击快捷方式:
文章图片
(5)双击任务栏图标,运行OpenXXX GUI:
文章图片
(6)输入私钥密码:
文章图片
文章图片
文章图片
(7)查看本地Windows 10自动分配的IP:C:\\WINDOWS\\system32> ipconfig
文章图片
(8)本地Windows 10能通过ECS1的私有IP地址16.0.223登录SSH:
文章图片
备注:
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
文章图片
(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
文章图片
备注:
a、本地Windows 10能通过ECS2的私有IP地址0.0.9登录SSH
文章图片
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
文章图片
# ping 10.0.0.9
文章图片
(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
文章图片
(4)后台启动OpenXXX,需输入systemd-tty-ask-password-agent命令和服务端加密密钥123456:
# openvpn --daemon --cd /etc/openvpn/client --config client.ovpn --log-append /var/log/openvpn.log
文章图片
(5)查看OpenXXX进程:
# ps -ef | grep openvpn
文章图片
# ss -tunlp | grep openvpn
文章图片
(6)部署后本地CentOS 7.9自动生成tun0虚拟网卡,能ping通ECS2的私有IP地址0.0.9,并能访问公网:
# ip add l
文章图片
# ping -c 3 10.0.0.9
文章图片
# ping -c 3 www.aliyun.com
文章图片
8、无公网IP和EIP的ECS2通过ECS1的EIP访问公网:
(1)配置前ECS2无法直接访问公网:
文章图片
(2)确认ECS1已开启IP转发功能:
# sysctl -p | grep "net.ipv4.ip_forward"
文章图片
备注:由于之前实验操作,此时ECS1对应VPC专有网络2,ECS2对应VPC专有网络1
(3)在VPC专有网络2中添加自定义路由条目,0.0.0.0/0,下一跳类型指向绑定EIP的ECS1:
文章图片
文章图片
文章图片
文章图片
文章图片
(4)添加的自定义路由条目手动发布至CEN中:
【阿里云VPC实验五则】
推荐阅读
- 走进Java接口测试之理解JSON和XML基础
- IOS技术分享| any自习室场景实现
- Centos7 安装 nbd模块
- 单链表各种操作的代码实现
- Redis集群高可用(Keepalived+Twemproxy)
- 使用jQuery下拉隐藏显示
- WordPress网站标识中的双logo()
- Divi主题与Yoast SEO冲突
- DIVI网站修改由于”空白引荐来源”而被阻止-有任何解决方法()