docker 如何將 docker0 介面 ip 位址轉換為主機 ip 位址

docker 如何將 docker0 介面 ip 位址轉換為主機 ip 位址

我正在嘗試創建一個實驗室環境來試驗 MiTM 攻擊。我也想學習docker,所以我決定用docker來做這件事。我創建了 2 張圖像(攻擊者、受害者):

受害者 - 基於 Alpine,安裝了curl
攻擊者 - 基於 Ubuntu,安裝了 iputils-ping iproute2 curl iptables vim ettercap-text-only dsniff 和 tshark。

它們都在橋接網路中,因此這裡的路由器將是 docker0 介面(預設值:172.17.0.1)
我正在使用 --privileged 標誌運行攻擊者容器,以啟用 ettercap。

因此,當兩個映像都運行時,我正在從攻擊者容器執行 ettercap(也嘗試使用 arpspoof 工具,效果相同。):
ettercap -T -i eth0 -M arp:remote //victim_ip/ //172.17.0.1/

受害者的流量正在通過攻擊者,但存在一個問題,即當受害者嘗試 ping google.com 時沒有回應。 MiTM 攻擊正在發揮作用,因為我可以在受害容器上看到此流量,但有東西阻止了它。

我已經發現這裡出了什麼問題。我在我的主機上開啟了2個wireshark,一個在docker0介面上,一個在我的預設wifi介面上。在攻擊之前,當我從全球網路ping 某些內容時,docker 會將其docker IP 位址轉換為我的主機IP 位址,並且工作正常,但在arpspoofing 後,它無法正常工作- 主機正在發送ip 來源的資料包docker 受害者容器 (172.17.0.3)。另外,奇怪的是,另一個容器(攻擊者)可以毫無問題地 ping 外部網路(docker0 將 docker ip 正確轉換為主機 ip)。來自兩張wireshark的圖片,如下。

圖片來自兩個wireshark

檢查了 iptables,這條規則(在下圖中選擇)正在將我的 docker ip 位址轉換為主機 ip 位址,但是在攻擊之後,這條規則不起作用(pkts 在 arp 欺騙攻擊後不會增加)。我嘗試添加一些額外的 iptables 規則但沒有效果。我不是 iptables 大師,所以如果有人有其他想法也應該檢查,請給我提示。

在此輸入影像描述

也許有人可以向我解釋或給我一些額外的資料,了解 docker 如何準確地將其 IP 位址轉換為橋接網路上的主機 IP 位址,以及在 arp 欺騙攻擊後我可以採取哪些措施來恢復正確的轉換。每一條建議將不勝感激。

答案1

  • 安裝 Docker 後,會出現一個名為docker0會建立一個名為 的網路介面來連接每個容器。
  • 當 Docker 建立容器時,預設會為其分配一個虛擬網路接口,名稱以veth.然後Docker透過iptables規則將主機網路介面的流量轉送到虛擬網路介面。
  • 如果您使用 command 建立容器docker run --network=host ...,您將使容器使用主機的網路介面。此時,容器的IP位址與主機相同。

相關內容