Ubuntu ARP 回復配置
我想知道什麼/是否有任何配置可以啟用 arp 回复。
我有一台帶有兩個介面的 Ubuntu 機器——一個是連接到非公共 LAN 的乙太網,另一個是連接到公共網際網路的 Wifi。我暫時需要一台電腦在專用 LAN 上訪問 Internet,所以我設置了一個 SNAT,以便將專用 LAN 上的地址映射到 WiFi 網路 LAN。
編輯:我沒有提到我還設置了一個 DNAT 來翻譯地址。
發送 ping 出站到 8.8.8.8 命中,但返回時我的 WiFi 路由器不知道“誰擁有”這個 natted 地址 (192.168.7.33),所以它發送一個 arp 請求。
我跑了
sudo arp -v -i wlp1s0 -s 192.168.7.33 84:7b:eb:35:a4:e0
,其中硬體地址是與乙太網連結關聯的硬體地址(我還執行了相同的命令,後跟“pub”,但它仍然沒有發送)。它現在在我的 arp 表中……:Address HWtype HWaddress Flags Mask Iface 192.168.7.33 ether 84:7b:eb:35:a4:e0 CM wlp1s0
但是,Ubuntu 盒子仍然從不回复 arps -
19:26:59.542278 IP 192.168.7.33 > google-public-dns-a.google.com: 19:27:51.477054 IP 192.168.7.33 > 8.8.8.8: ICMP echo request, id 3312, seq 2692, length 64 19:27:51.493773 ARP, Request who-has 192.168.7.33 tell 192.168.7.254, length 46
第一條消息是去 google 路上的 ping,第二條是尋找 192.168.7.33 的路由器。
參考這篇文章, 如果請求的 IP 地址與另一個(禁用)介面相關聯,Linux 不會回复 ARP 請求消息,我檢查了核心的 Ip 路由表:
sudo ip route show table local broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1 local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1 local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1 broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1 broadcast 192.168.3.0 dev enp0s31f6 proto kernel scope link src 192.168.3.12 local 192.168.3.12 dev enp0s31f6 proto kernel scope host src 192.168.3.12 broadcast 192.168.3.255 dev enp0s31f6 proto kernel scope link src 192.168.3.12 broadcast 192.168.7.0 dev wlp1s0 proto kernel scope link src 192.168.7.117 local 192.168.7.117 dev wlp1s0 proto kernel scope host src 192.168.7.117 broadcast 192.168.7.255 dev wlp1s0 proto kernel scope link src 192.168.7.117
在這個問題中,使用者設置了到達地址的路由(與我的 NAT 不同),所以我繼續添加路由,但它仍然沒有 ARP:
路線-n
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.7.254 0.0.0.0 UG 600 0 0 wlp1s0 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 wlp1s0 192.168.3.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s31f6 192.168.7.0 0.0.0.0 255.255.255.0 U 600 0 0 wlp1s0 192.168.7.33 192.168.3.10 255.255.255.255 UGH 0 0 0 enp0s31f6
我可以更改 Ubuntu 上的設置以便我的機器回复 ARP 請求嗎?如果沒有,那麼下一個可以查看我們為什麼沒有響應的地方在哪裡?
編輯 2:這是我設置 NAT 的方式:
sudo iptables -t nat -A POSTROUTING -s 192.168.3.10 -j SNAT --to-source 192.168.7.33 sudo iptables -t nat -A PREROUTING -d 192.168.7.33 -j DNAT --to-dest 192.168.3.10
編輯 3:從 DNAT/SNAT 更改為偽裝是有效的,並且更容易/更具可擴展性。
ARP 回復會自動啟用。
/proc
可能可以使用or中的一些條目來關閉它們/sys
,但我必須搜尋它。你所擁有的是一個非常標準的 NAT 情況。您還沒有提供最重要的資訊,即如何設置 NAT,但通常是這樣的:
echo "1" > /proc/sys/net/ipv4/ip_forward iptables -P INPUT ACCEPT iptables -F INPUT iptables -P OUTPUT ACCEPT iptables -F OUTPUT iptables -P FORWARD DROP iptables -F FORWARD iptables -t nat -F iptables -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
這將啟用轉發、清除
iptables
規則、設置預設策略、在FORWARD
鏈中設置過濾以便接受從$INTIF
到$EXTIF
的任何數據包,而對於相反方向,它們必須由連接跟踪器 (nf_conntrack
) 跟踪。最後,所有轉發的數據包都是MASQUERADED
,這是SNAT
介面上存在的地址,因此即使該地址發生變化,您也將始終使用正確的地址。不需要額外的路線。如果需要,您可以按源地址限制轉發。
$INTIF
是內部介面(您的 LAN),$EXTIF
是外部介面(您的 WLAN)。您可以使用 Ubuntu 使用的任何工具(systemd 等)使其持久化。這是開箱即用的,不需要擺弄。連接跟踪器將 DNAT 將數據包返回到正確的地址,不需要額外的規則,將它們轉發回 LAN,並在 LAN 介面上發送 ARP,它應該從那裡發送出去。
我懷疑您的設置有些不同,這就是為什麼您最終會在錯誤的位置使用有趣的 ARP。