Iptables

使用源 IP 進行 nftables natting

  • November 16, 2021

我在數據中心有一台伺服器,它是 Proxmox 伺服器。在伺服器上(其中之一,它們位於 Proxmox 集群中)我託管了各種 VM。

VM 上的服務通過 iptables(使用 ufw)natting 公開,如下例所示:

-A PREROUTING -i eno1 -p tcp -d <public_ip> --dport 21 -j DNAT --to-destination <local_ip>:<port>
-A PREROUTING -i eno1 -p tcp -d <public_ip> --dport 23 -j DNAT --to-destination <local_ip>:<port>
-A PREROUTING -i eno1 -p tcp -d <public_ip> --dport 10090:10100 -j DNAT --to-destination <local_ip>:<port>

VM 使用虛擬網橋 nic 連接,例如 Proxmox 狀態的文件。(Proxmox 文件)這行得通。然而,有一個缺點。VM 沒有收到連接方的源 IP。這給了我有限的 IP 過濾選項,登錄各種其他 VM。

現在我正在尋找一個類似的 nftables 解決方案(它將或已經取代 iptables)。

有沒有辦法設置允許源 IP 發送到 VM 的 natting 或轉發規則?

您可以通過這種方式在 nftables 中執行相同的規則:

table inet nat {
   chain prerouting {
       type nat hook prerouting priority dstnat;
       iif eno1 ip daddr { <public_ip> } tcp dport 21 dnat <local_ip>:<port>
       iif eno1 ip daddr { <public_ip> } tcp dport 23 dnat <local_ip>:<port>
       iif eno1 ip daddr { <public_ip> } tcp dport 10090-10100 dnat <local_ip>:<port>
   }
}

雖然,目標 NAT 不會重寫源 IP,所以您應該看到真實的源 IP。如果不能,您可能在要刪除的路由後 NAT 表中有一個源 NAT 規則。你可以用iptables -t nat -L.

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