Linux
如何在具有 4 個介面的機器上正確設置路由,以使三個介面位於同一子網中?
所以我有一台有 4 個介面的 linux 機器:
- enp1s0
- enp2s0
- enp3s0
- enp4s0
我要做的是讓 enp1s0 成為 WAN 介面,並通過 DHCP 獲取它的 IP 地址、dns 和網關。
對於其他三個介面,我希望它們具有:
- 同一子網上的 IP 地址
- 讓一個 LAN 介面上的所有主機能夠看到另一個 LAN 介面上的所有其他主機
- 將shorewall作為防火牆執行
- 使用 DNS 遮罩
這是我到目前為止所得到的:
貓 /etc/網路/介面 # 此文件描述系統上可用的網路介面 # 以及如何啟動它們。有關詳細資訊,請參閱介面 (5)。 源 /etc/network/interfaces.d/* # 環回網路介面 自動lo iface lo inet 環回 # 主網路介面 #列為#1 # 這是wan介面 自動 enp1s0 iface enp1s0 inet dhcp #列為#2 # 這個路由到樓上 自動 enp3s0 iface enp3s0 inet 靜態 地址 192.168.47.254 網路遮罩 255.255.255.0 網路 192.168.47.0 廣播 192.168.47.255 #列為#4 自動 enp2s0 iface enp2s0 inet 靜態 地址 192.168.47.253 網路遮罩 255.255.255.0 網路 192.168.47.0 廣播 192.168.47.255 #列為#3 自動 enp4s0 iface enp4s0 inet 靜態 地址 192.168.47.252 網路遮罩 255.255.255.0 網路 192.168.47.0 廣播 192.168.47.255
貓 /etc/dnsmasq.conf 介面=enp2s0 介面=enp3s0 介面=enp4s0 listen-address=192.168.47.254 # 明確指定要監聽的地址 bind-interfaces # 綁定到介面以確保我們不會將東西發送到其他地方 server=8.8.8.8 # 將 DNS 請求轉發到 Google DNS domain-needed # 不要轉發短名稱 bogus-priv # 從不轉發非路由地址空間中的地址。 dhcp-range=192.168.47.100,192.168.47.250,12h # 分配 192.168.46.100-250 之間的 IP 地址,租用時間為 12 小時 日誌-dhcp 日誌查詢
interface=enp2s0 # 使用介面 wlan0 interface=enp3s0 # 使用介面 wlan0 interface=enp4s0 # 使用介面 wlan0 listen-address=192.168.47.254 # 明確指定要監聽的地址 bind-interfaces # 綁定到介面以確保我們不會將東西發送到其他地方 server=8.8.8.8 # 將 DNS 請求轉發到 Google DNS domain-needed # 不要轉發短名稱 bogus-priv # 從不轉發非路由地址空間中的地址。 dhcp-range=192.168.47.100,192.168.47.250,12h # 分配 192.168.46.100-250 之間的 IP 地址,租用時間為 12 小時 日誌-dhcp 日誌查詢
這是來自其中一台客戶端機器的範例 ip 路由表:
ip -one 地址 1: lo inet 127.0.0.1/8 範圍主機 lo\ valid_lft forever preferred_lft forever 1: lo inet6 ::1/128 範圍主機\valid_lft 永遠首選_lft 2:eth0 inet 192.168.46.5/24 brd 192.168.46.255 範圍全域 eth0\valid_lft 永遠 Preferred_lft 2: eth0 inet6 fe80::82ee:73ff:fe5d:89d1/64 範圍連結\valid_lft forever preferred_lft forever 3: eth1 inet 192.168.47.244/24 brd 192.168.47.255 範圍全域 eth1\ valid_lft 永遠首選_lft 永遠 3: eth1 inet6 fe80::82ee:73ff:fe5d:89d0/64 範圍連結\valid_lft 永遠首選_lft 永遠
路線-n 核心IP路由表 目標網關 Genmask 標誌 Metric Ref Use Iface 0.0.0.0 192.168.46.1 0.0.0.0 UG 0 0 0 eth0 192.168.46.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0 192.168.47.0 0.0.0.0 255.255.255.0 U 1 0 0 eth1
到目前為止有效的方法:
- 不同介面上的機器獲得正確的 IP 地址
- 機器可以ping通路由器上的所有介面,也可以不通。我認為這可能取決於最近使用 DHCP 的哪台機器
- 如果我可以從客戶端機器 ping 通,其他的東西也可以工作,例如 ssh
- 我從來沒有讓兩台客戶端機器互相ping通
經過大量閱讀,我確定我需要靜態路由、每個 LAN 介面的不同子網或橋接。
理想情況下,我想根據介面在shorewall中設置權限,並且仍然為所有LAN介面使用一個子網。
您完全走錯了路,它與 Shorewall(或實際上任何其他防火牆包)沒有任何關係,而是與一般的 IP 網路有關。
如果您想像一個給定的 IP 主機在同一子網中有三個介面,並且從第四個子網到達該子網的數據包,那麼該主機如何知道三個介面中的哪個介面應該接收數據包?它在所有三個中都 ARP 嗎?它是否只是將所有流量發送到出現的第一個流量,從而阻止流量流向其他兩個流量?這就是為什麼如果您嘗試從 shell 配置它,您會收到有關重疊子網的錯誤消息。
所以 - 你有三個合理的選擇,還有幾個子選項。
- 轉儲其他兩個介面,只需將單個埠連接到交換機,然後將主機(可能還有同一子網中的 wifi)掛在該交換機上。可以將所有三個內部介面加入到單個綁定或團隊中*,但這基本上需要所有三個物理介面並將它們變成單個邏輯*介面。
- 創建 Linux 橋接介面。將 IP、DHCP 和其他配置元素提供給網橋,然後將三個物理介面綁定為網橋的成員。您的防火牆將單個網橋介面視為內部(……即使它連接到三個網段)。再一次 - 從 IP 的角度來看,您在內部子網中 有一個介面,而不是三個。
- 將三個介面放在三個不重疊的 IP 子網中並進行相應配置。