所以,我有一个 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
被禁用。
我缺少什么?
谢谢
答案1
好消息:有用!
更好的消息:它的工作原理是预期的!!!
坏消息:你说谎!!! ;-)
或者你有几个问题...
我在评论中要求提供更多信息,但您没有解释您希望如何路由数据包。这对你来说似乎微不足道,但这个问题实际上是为了暗示一个可能的答案。
问题1:WPA关联
您必须了解 WPA 以及如何设置它,因为它有时会起作用。我们看到它的工作原理如下ifconfig
:
status: associated
如果 WPA 由于某种原因不起作用,您会看到:
status: no carrier
这个神奇的咒语 ( ifconfig_wlan0="WPA DHCP"
)/etc/rc.conf
指示网络子系统运行wpa_请求者进而dhclient每当运行在wlan0
.除非我们关联 (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)”请参阅如果配置。SYNCDHCP
强制启动等待 dhclient 返回。这可确保在继续之前网络已准备好。
当我们确定 WPA 正常工作时,我们就可以进城了dhclient
。但我怀疑问题就出在这里。
问题2:路由
netstat -4rn
向我们显示路由表。您只是声称它“不起作用”。但你没有做任何事情来说明什么不起作用以及你期望什么。然后我需要做出大量假设。
所以我的假设是:
- 无线网络在这两种情况下都可以工作
- 您希望能够通过无线连接到互联网。
谎言来了:在第二种情况下,你声称status: no carrier
没有inet
withifconfig
但然后你的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)。
如果我们看看网络统计(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 解除关联。然后它会再次启动 - 需要关联然后获取新地址。这可能需要相当长的时间!如果您只是为re0
in设置 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"
设置默认路由后,您会注意到路由表中列出了default
如下所示的路由 ( )Destination
netstat -4rn
如果您希望计算机充当有线网络上 10.0.0.0/24 的路由器,以便它可以通过无线访问互联网,您还需要这样做:
gateway_enable="YES"
您可以在 FreeBSD 手册中阅读有关路由的更多信息31.2。网关和路由
问题 3:你的假设
你等同netif
于/etc/netstart
.看看里面netstart
,看看它是多么简单——但它却做了多少事情。我假设您的问题与路由相关,您真正需要的是:
# service netif restart
# service routing restart
真正的教训
我花了很多时间来回答这个问题。我没有这样做,因为这是一个有趣的问题。但我想表现出努力,因为OP努力更新问题。
这个问题是一个非常典型的简单故障排除问题,我们这里有很多问题。然后我想展示我通过哪些步骤来回答这个问题。也许我很幸运并且猜对了。但我希望清楚我需要多少假设和猜测。如果问题处理得更仔细,这一切都是可以避免的。
你应该吸取的教训:
- 不要要求人们根据您自己的假设回答问题。
- 清楚什么有效,什么无效。清楚地说明您如何测试以及您期望的结果
- 显示您精确的故障排除步骤。
- 不要根据您认为相关的内容挑选设置(即/etc/rc.conf)
请注意两个不同的人如何询问更多信息。你预先提供的信息是多么少啊。并且在更新时您甚至没有提供所要求的所有内容。你花在问题上的时间越多,人们花在回答上的时间就越多。