1. 程式人生 > >阿里雲CentOS 7無外網IP的ECS訪問外網(配置閘道器伺服器)

阿里雲CentOS 7無外網IP的ECS訪問外網(配置閘道器伺服器)

說明:

1、必須要有一臺機器具有外網IP的ECS。

2、如果不想配置具有外網IP的ECS時,可以購買NAT閘道器,但需要錢,貴。下面會說明NAT閘道器的配置。

3、最後吐槽一下阿里雲VPC閘道器導致不能按照配置普通閘道器一樣配置(參考:https://www.cnblogs.com/EasonJim/p/10206728.html),必須結合VPC配置0.0.0.0/0來進行下一跳,不然你在ECS怎麼設定都無法成功。其實這個問題是由於VPC本身最上層做了NAT,並通過route檢視會發現253這個地址有VPC佔用,無論怎麼配置0.0.0.0的下一跳都會先轉到253這個地址。

4、吐槽一下第3點的缺點,如果從物理機房遷移到實體機房時,不清楚VPC的特定會踩很多坑,比如OpenVPN,由於預設優先轉到了VPC網路,此時會造成虛擬的OpenVPN網絡卡得不到轉發到子網地址,此時解決的方法只能是有子網ping一下這臺ECS的OpenVPN服務端,讓其先識別才可以轉發到子網。

下面是具體的配置:

環境:

ECS1(沒外網IP):172.18.6.247

ECS2(有外網IP,其實是VPC做了NAT):172.18.6.248

1、具有外網IP的ECS2配置閘道器:

# 開啟轉發
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
# 生效
sysctl -p
# 配置iptables做SNAT
iptables -t nat -I POSTROUTING -s 172.18.6.0/24 -j SNAT --to-source 172.18.6.248
# 上述可以理解成:iptables -t nat -I POSTROUTING -s VPC的IP段 -j SNAT --to-source 有公網IP的ECS內網IP

2、在VPC增加0.0.0.0/0的下一跳為ECS2例項

那麼此時在登入ECS1時,不用設定閘道器或者設定了閘道器都可以訪問外網。

3、如果要做DNAT時,如下操作即可:

iptables -t nat -I PREROUTING -p tcp --dport 50022 -j DNAT --to 172.18.6.247:22 
# 可以這樣理解: iptables -t nat -I PREROUTING -p tcp --dport 外網IP的ECS埠 -j DNAT --to 只有內網IP的ECS的IP:埠 

4、如果想要換成夠買NAT閘道器來實現時,上面的配置基本不用,直接在VPC上這樣配置即可實現上面SNAT和DNAT的全部功能。

 

參考:

https://yq.aliyun.com/articles/607330