1. 方案介紹
方案1: 使用阿里云的公網 NET 網關
方案2: 使用阿里云的公網 NET 網關 + IPV4 網關
方案3: 通過有公網 IP 的 ECS 進行 IP 轉發
方案對比
方案名稱 | 優點 | 缺點 |
---|---|---|
1.使用阿里云的公網 NET 網關 | 阿里云提供的 SNAT 服務,使用穩定 | 需要購買 NET 網關,價格較貴,每年 2000 左右 |
2.使用阿里云的 公網NET網關 + IPV4 網關 | 基于方案1再加個 IPV4 網關, 可對 VPC 下所有 ECS 訪問公網的流量進行管控, 可以將流量轉發至防火墻 | 1. 需要購買 NET 網關,價格較貴,每年 2000 左右 2. 配置麻煩 |
3.通過有公網 IP 的 ECS 進行 IP 轉發 | 無需購買額外服務 | 需要自己在 ECS 配置,穩定性較差,取決于運維能力 |
2. 實現步驟
2.1 方案1: 使用阿里云的 公網 NET 網關
image-20240821110950458.png
- 直接購買一個公網 NET 網關+彈性 IP
- 配置公網NET網關的 SNET 服務, 這里可選 整個 VPC , 某個交換機, 某個 ECS 。需要說明,并不是這里配置完, 對應的云服務就有公網訪問能力了, 還需完成步驟3。
- 將需要獲取公網訪問能力的 ECS 對應的交換機,配置路由表的下一跳地址, 0.0.0.0/0 跳到 NET 網關
2.2 方案2:使用公網 NET 網關 + IPV4 網關
image-20240821111008733.png
方案二需要兩個交換機
sw1: 有公網 IP 服務器的交換機
sw2: 存內網服務器的交換機
- 在 sw1 下創建NET網關
- 配置 sw2 的路由條目(需要新建), 0.0.0.0/0 跳到 NET 網關
- 新增 IPV4 網關, 關聯到 sw1 的路由表, 激活
到這一步, 私網服務器已經可以訪問公網了, 為實現流量管控(需要配合虛擬防火墻), 可以加上以下步驟
- 新增一張路由表, 類型選擇邊界網關
- 將該路由表綁定到 IPV4 網關
這個邊界網關類型的路由表, 無法自定義路由條目, 只可編輯非默認的系統路由條目, 即, 管理該 vpc 下的全部交換機的下一跳流量, 若有防火墻, 可以將下一跳流量轉發至防火墻的彈性網卡
2.3 通過有公網 IP 的 ECS 進行 IP 轉發
image-20240821114007024.png
在阿里云控制臺配置交換機的路由條目, 將 0.0.0.0/0 的下一跳地址設置為帶公網 IP 的 ECS
-
在公網 ECS上操作: 開啟公網 ECS 的 IP 轉發功能
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p
-
在公網 ECS上操作: 設置 iptables 的 NAT 轉發規則
# 命令 iptables -t nat -I POSTROUTING -s {CIDR} -j SNAT --to-source {PUB_IP} # {CIDR}: VPC 或交換機的網段, 如 172.16.0.0/16 # {PUB_IP}: 公網 ECS 的內網 IP # 示例, VPC網段是 172.16.0.0/16 , 公網 ECS 的內網 IP 是 172.16.211.72 iptables -t nat -I POSTROUTING -s 172.16.0.0/16 -j SNAT --to-source 172.16.211.72
-
在公網 ECS上操作: 到這一步基本就可以在內網 ECS 上訪問公網了, 若還是不行, 關閉 ufw 防火墻, 即使防火墻狀態已經是 inactive, 也執行一下關閉命令
ufw disable
排錯方式
在內網服務器上
ping www.baidu.com
在公網服務器上使用以下命令抓包:
tcpdump host {內網服務器IP} -i eth0 |grep ICMP
成功的配置應該有 公網 IP 到內網 IP 的流量, 和內網 IP 到 公網 IP 的流量