如何在 Ubuntu 的 iptables 中設定連接埠轉送?

如何在 Ubuntu 的 iptables 中設定連接埠轉送?

這句話應該要解釋我如何做到這一點,但我不明白......

接下來,我新增了以下規則,將所有 http 請求(來自連接埠 80)轉送到 Squid 伺服器連接埠 3128 :

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.1.1:3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

iptables -t nat -A PREROUTING -i venet0 -p tcp --dport 80 -j DNAT --to 127.0.0.1:3128
iptables -t nat -A PREROUTING -i venet0:0 -p tcp --dport 80 -j REDIRECT --to-port 3128

這應該有效,但事實並非如此。我的iptables是空的,內容/etc/network/interface如下:

auto lo
iface lo inet loopback
    address 127.0.0.1
    netmask 255.0.0.0
    broadcast 127.255.255.255
    up ip route replace 127.0.0.0/8 dev lo
# Auto generated venet0 interfaces
auto venet0
iface venet0 inet static
    address 127.0.0.1
    netmask 255.255.255.255
    broadcast 0.0.0.0
    up route add default dev venet0
iface venet0 inet6 static
    address ::2
    netmask 128
    up ip -6 r a default dev venet0
    up ip addr add {...externalIPv6...} dev venet0
auto venet0:0
iface venet0:0 inet static
    address {...externalIP...}
    netmask 255.255.255.255

答案1

我將以此作為答案,儘管它還不是(但希望如此)。我這樣做的原因是我相信這個問題需要多次迭代才能解決。

你的 iptables 規則對我來說看起來沒問題,但我認為你的 /etc/network/interfaces 檔案有幾個問題。您是從其他地方複製的,還是根據您的需求進行了修改?

我看到的問題:

  1. 為什麼要指定環回介面?通常,該節的前兩行就可以。
  2. 您正在將兩個位址指派給同一介面 venet0。
  3. 第一個 venet0 節的網路遮罩限制太多,與廣播位址不一致。
  4. venet0 的第二節分配有兩個位址:您的外部 IPv6 位址和 ::2。
  5. 在 venet0 的節中,網路遮罩限制太多。
  6. 同一個介面 venet0/venet0:0 同時分配了環回位址和外部位址,有什麼意義?

如果你告訴我們你想用 VMWare 做什麼,那將會很有幫助,現在我很茫然。

相關內容