그래서 FreeBSD 호스트가 있습니다. 현재 이더넷 포트는 이더넷 스위치(해당 네트워크에 DHCP 서버 없음)에만 연결되어 있으며 Wi-Fi는 올바르게 구성되어 작동하고 있습니다.
이것은 /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 주소를 사용하도록 이더넷 포트를 변경하고 재부팅하려고 하면 Wi-Fi 작동이 중지됩니다.
# 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
중요한 차이점은 wlan0
고정 IP를 사용하도록 인터페이스를 변경한 후 상태가 이제 "No Carrier"라는 것입니다.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_requester그런 다음dh클라이언트에서 실행될 때마다 wlan0
DHCP(dhclient)는 무선 네트워크에 연결(wpa_supplicant)하지 않으면 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
것으로 주장합니다 .ifconfig
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
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인데, 이는 우리 무선 네트워크의 라우터로 추정됩니다. 작동한다면 해당 네트워크에도 연결할 수 있다는 것을 알 수 있습니다. 드문 경우지만 핑(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).
서로 다른 두 사람이 어떻게 더 많은 정보를 요청하는지 주목하세요. 당신이 미리 제공하는 정보가 얼마나 적은지. 그리고 업데이트할 때 요청된 모든 것을 제공하지도 않았습니다. 질문을 하는 데 더 많은 시간을 소비할수록 사람들은 질문에 답하는 데 더 많은 시간을 소비하게 됩니다.