Networking

當乙太網配置為靜態 ip 時無線不工作

  • December 10, 2020

所以,我有一個 FreeBSD 主機。目前,它的乙太網埠僅連接到乙太網交換機(該網路上沒有 DHCP 伺服器)並且 wifi 已正確配置並可以正常工作。


/etc/rc.conf是有效的:

# Ethernet
ifconfig_re0="DHCP"
ifconfig_re0_ipv6="inet6 accept_rtadv"

# WiFi
wlans_ath0="wlan0"
ifconfig_wlan0="WPA DHCP"

使用相應ifconfig的輸出(沒有環回):

re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
       options=8209b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC,LINKSTATE>
       ether f8:0f:41:bf:05:49
       inet6 fe80::fa0f:41ff:febf:549%re0 prefixlen 64 scopeid 0x1
       inet 0.0.0.0 netmask 0xff000000 broadcast 255.255.255.255
       media: Ethernet autoselect (1000baseT <full-duplex>)
       status: active
       nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
       ether b8:ee:65:4f:b9:c4
       inet 192.168.1.129 netmask 0xffffff00 broadcast 192.168.1.255
       groups: wlan
       ssid ThePromisedLan channel 6 (2437 MHz 11g ht/20) bssid b4:75:0e:9f:b4:9c
       regdomain 106 indoor ecm authmode WPA2/802.11i privacy ON
       deftxkey UNDEF TKIP 2:128-bit txpower 20 bmiss 7 scanvalid 60
       protmode CTS ampdulimit 64k ampdudensity 8 shortgi wme burst
       roaming MANUAL
       media: IEEE 802.11 Wireless Ethernet MCS mode 11ng
       status: associated
       nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

以及相應netstat -r的輸出:

Routing tables

Internet:
Destination        Gateway            Flags     Netif Expire
0.0.0.0/8          link#1             U           re0
localhost          link#2             UH          lo0
192.168.1.0/24     link#3             U         wlan0
192.168.1.129      link#3             UHS         lo0

Internet6:
Destination        Gateway            Flags     Netif Expire
::/96              localhost          UGRS        lo0
localhost          link#2             UH          lo0
::ffff:0.0.0.0/96  localhost          UGRS        lo0
fe80::/10          localhost          UGRS        lo0
fe80::%re0/64      link#1             U           re0
fe80::fa0f:41ff:fe link#1             UHS         lo0
fe80::%lo0/64      link#2             U           lo0
fe80::1%lo0        link#2             UHS         lo0
ff02::/16          localhost          UGRS        lo0

這是/etc/rc.conf不起作用的:

但是,一旦我嘗試將乙太網埠更改為使用靜態 IP 地址並重新啟動,wifi 就會停止工作。

# Ethernet
ifconfig_re0="inet 10.10.10.1/24"

# WiFi
wlans_ath0="wlan0"
ifconfig_wlan0="WPA DHCP"

對應ifconfig的輸出:

re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
       options=8209b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC,LINKSTATE>
       ether f8:0f:41:bf:05:49
       inet 10.10.10.1 netmask 0xffffff00 broadcast 10.10.10.255
       media: Ethernet autoselect (1000baseT <full-duplex>)
       status: active
       nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
wlan0: flags=8c43<UP,BROADCAST,RUNNING,OACTIVE,SIMPLEX,MULTICAST> metric 0 mtu 1500
       ether b8:ee:65:4f:b9:c4
       groups: wlan
       ssid "" channel 11 (2462 MHz 11g)
       regdomain 106 indoor ecm authmode WPA1+WPA2/802.11i privacy MIXED
       deftxkey UNDEF txpower 20 bmiss 7 scanvalid 60 protmode CTS wme burst
       roaming MANUAL bintval 0
       media: IEEE 802.11 Wireless Ethernet autoselect (autoselect)
       status: no carrier
       nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

以及相應netstat -r的輸出:

Routing tables

Internet:
Destination        Gateway            Flags     Netif Expire
10.10.10.0/24      link#1             U           re0
10.10.10.1         link#1             UHS         lo0
localhost          link#2             UH          lo0
192.168.1.0/24     link#3             U         wlan0
192.168.1.129      link#3             UHS         lo0

Internet6:
Destination        Gateway            Flags     Netif Expire
::/96              localhost          UGRS        lo0
localhost          link#2             UH          lo0
::ffff:0.0.0.0/96  localhost          UGRS        lo0
fe80::/10          localhost          UGRS        lo0
fe80::%re0/64      link#1             U           re0
fe80::fa0f:41ff:fe link#1             UHS         lo0
fe80::%lo0/64      link#2             U           lo0
fe80::1%lo0        link#2             UHS         lo0
ff02::/16          localhost          UGRS        lo0

我認為重要的區別是在我將介面更改為使用靜態 IPwlan0後,現在的狀態是“無運營商” 。re0

此外,我正在測試我的配置在重新啟動後是否正常工作,但事實並非如此。但是在更改配置並執行後我也得到了相同的結果service netif restart。最後,如果我在啟用 DHCP 的情況下啟動re0並切換到靜態 IP,然後執行service netif restart,它不起作用,但重新啟動或執行/etc/netstart工作。

pf被禁用。

我錯過了什麼?

謝謝

好消息:它有效!

更好的消息:它按預期工作!!!

壞消息:你撒謊!!! ;-)

或者你有幾個問題……

我在評論中要求提供更多資訊,但您沒有解釋您希望如何路由數據包。這對你來說可能看起來微不足道,但這個問題實際上是為了暗示一個可能的答案。

問題一:WPA 關聯

您必須了解 WPA 以及如何設置它,因為它有時會起作用。我們看到它的工作原理如下ifconfig

status: associated

如果 WPA 由於某種原因無法正常工作,您會看到:

status: no carrier

這個神奇的咒語 ( ifconfig_wlan0="WPA DHCP") in/etc/rc.conf指示網路子系統在執行時執行wpa_supplicant,然後執行dhclientwlan0。除非我們(wpa_supplicant)與無線網路相關聯,否則 DHCP(dhclient)將無法獲得 IP 地址。

您不需要重新啟動所有介面。你可以指定你想要的。

service netif restart wlan0

要調試它,我們需要使用正確的配置文件wpa_supplicant在調試模式下執行:-d``-c

wpa_supplicant -i wlan0 -d -c /etc/wpa_supplicant.conf

如果您收到它已經在執行的錯誤,請先關閉wlan0。您可以通過以下方式驗證這一點:

ps -ax | grep wpa
ps -ax | grep dhclient

你可能想這樣做:

service netif stop wlan0

但這將完全刪除介面。相反,只需將其關閉(這將停止 WPA 請求者和 DHCP)。

ifconfig wlan0 down

完成調試後,再次啟用它:

ifconfig wlan0 up

另一種選擇是註釋掉ifconfig_wlan0="WPA DHCP"並重新啟動界面(或重新啟動)。然後可以在前台執行 wpa_supplicant 進行調試。

然而,我不認為你對此有任何問題,這是你的“謊言”(我們在下面回到這個)。但是,如果您確實遇到了界面緩慢且不太穩定的問題,那麼您最終可能會遇到類似的情況/etc/rc.conf

ifconfig_wlan0="-ht WPA SYNCDHCP powersave"

我在帶有iwn無線適配器的筆記型電腦上使用它,否則會定期出現關聯問題。

-ht禁用“高吞吐量 (HT)”,請參見ifconfigSYNCDHCP強制啟動等到 dhclient 返回。這可確保在繼續之前網路已準備就緒。

當我們確定 WPA 正常工作時,我們就可以繼續進城了dhclient。但我懷疑問題出在這裡。

問題 2:路由

netstat -4rn向我們展示了路由表。您只是聲稱它“不起作用”。但是你沒有做任何事情來說明什麼是行不通的以及你所期望的。然後我需要做出一大堆假設。

所以我的假設是:

  • 無線網路在這兩種情況下都有效
  • 您希望能夠通過無線連接到 Internet。

謊言來了:在第二種情況下,您聲稱status: no carrier沒有inetifconfig但隨後您的netstat -r節目:

192.168.1.0/24     link#3             U         wlan0
192.168.1.129      link#3             UHS         lo0

因此,路由堆棧知道網路 192.168.1.0/24 上wlan0,並且您在該網路上有一個地址 (.129)。

如果我們查看netstat(1)標誌:

H    RTF_HOST      Host entry (net otherwise)   
S    RTF_STATIC    Manually added
U    RTF_UP        Route usable

我們直接被告知該路線可用。ifconfig這與沒有inet行不匹配。

WPA 和 DHCP 在後台非同步執行。您可能發布得ifconfig太早了。使用該路由表,您的ifconfig外觀會有所不同。跟著/var/log/messages看看會發生什麼。更糟糕的是,如果您service netif restart在添加 IP 地址時使用。這將重新啟動所有網路介面。然後,您將等待 dhclient 釋放地址並等待 wpa_supplicant 解除關聯。然後它將再次啟動 - 需要關聯然後獲取一個新地址。這可能需要相當長的時間!如果您只是為re0in設置 IP,/etc/rc.conf則只需使用 重新啟動該介面service netif restart re0

當您使用RFC 1918地址re0並且您將 10.0.0.1(通常是網關)靜態分配給該介面時,我猜這是一個未連接到其他任何東西的本地網路。它可能是。這只是一個不太常見的配置。

在第一個範例中,您將其設置為 DHCP。沒有可用的伺服器,因此沒有設置地址。如果沒有地址,我們無法將任何東西路由到該介面。然後通過另一個可用的介面發送它是“幸運的”。

在第二個範例中,我假設無線網路正在工作,現在您已經定義了 2 個網路:

10.10.10.0/24
192.168.1.0/24

我很確定您將能夠 ping 這些地址:

ping 127.0.0.1
ping 10.0.0.1
ping 192.168.1.129
ping 192.168.1.1

但是你沒有向我們展示你是如何測試的,所以我們只能猜測。如果其中任何一個失敗,它們會為我們提供有價值的調試資訊。

如果 127.0.0.1 不起作用,那麼您的 IP 堆棧/防火牆有問題。如果 10.0.0.1 不工作,它通常是防火牆(但沒有 pf 或者我在這裡假設 iptables)問題,因為這是我們自己在本地網路上的地址。如果我們知道另一個 10.0.0.x 地址(因為我們有一個本地 /24),我們可以確認網路正常工作。與 192.168.1.129 相同 - 這是我們自己的地址,應該可以使用。真正有趣的是 192.168.1.1,它應該是我們在無線網路上的路由器。如果這可行,那麼我們知道我們也能夠連接到該網路。在極少數情況下,它可以配置為不響應 ping (ICMP ECHO),但這種情況很少見。而且我的假設是這有效。

現在讓我們嘗試有趣的部分——與世界其他地方聯繫。從你所展示的我猜你會得到:

$ ping 1.1.1.1
PING 1.1.1.1 (1.1.1.1): 56 data bytes
ping: sendto: No route to host

這將是我們的確鑿證據。我們已經確定我們可以到達 10.0.0.0/24 和 192.168.1.0/24,因為我們知道這些網路在哪裡。但是您的電腦應該如何知道將其餘部分發送到哪裡?

如果我現在非常高的假設是正確的,我們只需要知道我們想要將所有不知道本地網路的數據包發送到哪裡。我們可以將預設路由添加到/etc/rc.conf

defaultrouter="192.168.1.1"

設置預設路由後,您會注意到您在路由表 ( ) 中列出defaultDestinationnetstat -4rn路由

如果您希望您的電腦充當有線網路上 10.0.0.0/24 的路由器,以便它可以通過無線連接到 Internet,您也需要這樣做:

gateway_enable="YES"

您可以在 FreeBSD 手冊31.2中閱讀更多關於路由的資訊。網關和路由

問題 3:你的假設

你等同netif/etc/netstart。看看裡面netstart,看看它是多麼簡單——但它做了多少事情。正如我假設您的問題與路由相關,您真正需要的是:

# service netif restart
# service routing restart

真正的教訓

我花了很多時間來回答這個問題。我沒有這樣做,因為這是一個有趣的問題。但我想表現出努力,因為 OP 努力更新問題。

這個問題是一個非常典型的簡單故障排除問題,我們在這裡很多人都有。然後我想展示我為回答這個問題所經歷的步驟。也許我很幸運並且猜對了。但我希望清楚我需要多少假設和猜測。如果問題處理得更仔細,所有這些都可以避免。

你應該吸取的教訓:

  • 不要要求人們根據您自己的假設回答問題。
  • 清楚什麼有效,什麼無效。清楚地說明您如何測試以及您期望的結果
  • 顯示您精確的故障排除步驟。
  • 不要根據您認為相關的內容(即/etc/rc.conf)挑選設置

請注意 2 個不同的人如何要求提供更多資訊。您預先提供的資訊很少。而且在更新時,您甚至沒有提供所有要求的內容。你花在問題上的時間越多,人們回答的時間就越多。

引用自:https://unix.stackexchange.com/questions/623340