Iptables

將 localhost 請求重定向到 Linux 容器

  • October 11, 2017

我在我的 Ubuntu 主機上執行了幾個 Linux 容器,每個容器都執行一個 webapp。要訪問 webapps,我使用iptables轉發埠:

sudo iptables -t nat -A PREROUTING -p tcp --dport <port> -j DNAT --to-destination #<container_ip>:<port>

如果流量來自我的主機*之外,這很有效。*如果請求是由 localhost 完成的,則它不起作用:

curl <host_ip>:<port>       #works (from outside the host)
curl <container_ip>:<port>  #works (from inside the host)
curl 127.0.0.1:<port>       #doesn't work (from inside the host)

我知道來自 localhost 的數據包不通過 iptables DNAT 規則,這就是它不起作用的原因。反正有沒有讓這個工作?

如果您iptables願意接受涉及. _ _localhost

@Brigo:這是不正確的。nat 表可以包含一個 OUTPUT 鏈。問題是 nat 表的 PREROUTING 鏈沒有應用於環回介面。

@rmonjo,除了 PREROUTING 鏈之外,還使用 OUTPUT 鏈:

iptables -t nat -A OUTPUT -o lo -p tcp --dport <port> -j DNAT \
--to-destination #<container_ip>:<port>

編輯:這不起作用。我在考慮不會解決這個問題的 REDIRECT 目標。

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