我有一台 CentOS 7 機器,有 2 個網卡 - 一個乙太網路端口,一個無線端口。我想建立一個 lxc 容器,充當滿足以下要求的路由器:
- 執行 hostapd 時,連接到存取點的用戶端應該會透過此容器路由所有資料。
- 任何其他安裝的 lxc 容器也應該透過此路由容器路由所有資料。
- 如果乙太網路連接埠連接到互聯網,則主機和所有容器以及連接到接入點的任何用戶端都應該具有互聯網存取權限。
為了配置它,我做了以下操作:
- 建立路由 lxc 容器
- 主機有介面 eth0 和 wlan0。我還創建了 br-eth0 和 br-wlan0,它們是網橋,並分別向它們添加了這兩個介面。
- br-eth0 設定為 dhcp 用戶端,透過 eth0 NIC 連接到我的外部路由器
- br-wlan0 的靜態 IP 為 10.0.0.1,dnsmasq 正在偵聽該介面並在 10.0.0.0/24 子網路中發布 IP 位址
- 我已經設定了 lxc 路由容器來建立 2 個連接到這些網橋的介面(leth0、leth1)。 Leth0 是 dhcp 用戶端,Leth1 的靜態 IP 位址為 10.0.0.201。
- 我建立了另一個橋接器 br-router,它也已連接到路由容器中的第三個介面。此橋接器在主機中的靜態 IP 位址為 192.168.3.254,路由容器 (leth2) 中的介面的靜態 IP 位址為 192.168.3.1
- 路由容器也運行 dnsmasq,監聽 Leth2 接口,並提供 192.168.3/24 子網 (.3 - .200) 中的 IP 位址,因此引入此網橋的任何其他 lxc 容器都將獲得任意 IP 位址在該子網中
- 我已經在路由容器中的 Leth0 上打開了偽裝。
- 我已將主機中的預設閘道配置為 192.168.3.1,以便來自主機內部的所有流量都透過路由容器進行路由。
出於測試目的,我還創建了第二個 lxc 容器,其中包含一個將 br-router 引入容器的接口,並且該容器在端口 8080 上託管一個網頁。 (本例為192.168.3.9)
透過此設置,我可以從主機、路由容器和測試容器內成功存取互聯網。同樣,從路由容器和測試容器中,我可以curlhttp://192.168.3.9:8080並成功檢索網頁。
因此,滿足要求2和3。然而,當將客戶端連接到該系統時,雖然我在10.0.0.0/24 子網路中獲得了IP 位址(透過br-wlan0 上運行的dnsmasq),但我沒有網路連線(我意識到我不會沒有互聯網連接)一些路由更改或其他什麼,這就是我在這裡的原因)。我還嘗試在leth1上的路由容器中使用firewalld從連接埠80到192.168.3.9:8080進行一些連接埠轉發,希望我可以使用以下命令將網頁從測試容器提供給連接的客戶端http://10.0.0.201——然而,沒有這樣的運氣。 (也就是說,此連接埠轉送嘗試確實允許我透過主機的 201 位址存取該網站)
我確信路由變更、ip 表規則和連接埠轉送規則的組合可以使這一切順利進行,但經過幾天的實驗,我一輩子都無法弄清楚。對於所有這些網絡,我仍然是新手,所以我希望有人可以幫助我。希望我對當前配置畫出了足夠好的圖片。
謝謝!