Linux

入站流量無法通過伺服器的公共 IP 工作

  • April 25, 2020

我在我們的 VPC 的私有網路中有兩台伺服器,它們都有公共 IP 和私有(10.0.0.0/24)子網。

  1. 伺服器 1 配置為 NAT (ubuntu 18.04)
  2. 伺服器 1 只有以下配置,沒有其他配置,即sysctl -w net.ipv4.ip_forward=1 && iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  3. 伺服器 2 只是一個簡單的伺服器,它應該使用 NAT 伺服器(伺服器 1)進行傳出流量。
  4. 兩台伺服器都使用ens10介面用於私有網路和eth0公共 IP

我已啟用以下網路配置和路由Server 2以通過以下方式路由傳出流量Server 1

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
 address x.x.x.x #public-ip
 netmask 32

#Private network interface
auto ens10
iface ens10 inet dhcp
  post-up ip route add default via 10.0.0.1

傳出流量按預期工作,因為我可以毫無問題地訪問網際網路,並且我看到的是 NAT IP 而不是伺服器 2 的公共 IP。

但是,當我嘗試使用其公共 IP (即 SSH 或訪問其他埠)連接到伺服器 2 時,它不會回复。雖然我只能通過本地網路訪問伺服器 2。

除此之外,一旦我刪除了post-up IP route add default via 10.0.0.1我可以通過其公共 IP 到達的路由Server 2,但所有傳出流量也路由到主介面,這是我不想要的。

似乎當數據包到達伺服器 2 上的 eth0 時,它們被路由到 ens10 網關 10.0.0.1,也許這就是為什麼如果我有上面提到的路由我無法回复的原因。

請指出我正確的方向,我有點卡在這一點上。

提前致謝。

您需要“拆分隧道”:

eth0在介面配置下添加如下規則

auto eth0
iface eth0 inet static
 address x.x.x.x
 netmask 32
 post-up ip rule add iif lo from x.x.x.x table 123
 post-up ip route add y.y.y.y dev eth0 table 123
 post-up ip route add default via y.y.y.y table 123

(yyyy 是網關地址)

使用上述規則和路由表(回复)流量來自主機本身,公共地址作為源地址將通過 eth0 出去。

注意:添加配置後,您可能需要重新啟動整個伺服器,因為僅重新啟動網路服務可能會失敗。

引用自:https://serverfault.com/questions/1014037