Я работаю над установкой Raspberry Pi в сети WPA2-Enterprise. Прямо сейчас он получает IP-адрес от DHCP-сервера на обоих eth0
и wlan0
. Этот пи идет туда, где он не может достичь порта Ethernet, поэтому он должен работать через Wi-Fi. Я могу пинговать, ssh или иным образом получить доступ к пи через IP-адрес, предоставленный eth0
. Однако я ни к чему не могу получить доступ к IP-адресу, предоставленному wlan0
. Когда я пингую IP-адрес, предоставленный wlan0
, tcpdump
видит эхо-запросы (и даже доходит до разрешения имени хоста). Я не понимаю, почему эхо не возвращается к своему источнику.
Вот некоторые результаты программ для получения дополнительной информации:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 xxx.yyy.142.1 0.0.0.0 UG 202 0 0 eth0
0.0.0.0 xxx.yyy.234.1 0.0.0.0 UG 303 0 0 wlan0
xxx.yyy.142.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
xxx.yyy.234.0 0.0.0.0 255.255.255.0 U 303 0 0 wlan0
# ifconfig
eth0 Link encap:Ethernet HWaddr ...:bd
inet addr:xxx.yyy.142.226 Bcast:xxx.yyy.142.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:72200 errors:98 dropped:740 overruns:0 frame:0
TX packets:3381 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4682949 (4.4 MiB) TX bytes:331697 (323.9 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:108 errors:0 dropped:0 overruns:0 frame:0
TX packets:108 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:9216 (9.0 KiB) TX bytes:9216 (9.0 KiB)
wlan0 Link encap:Ethernet HWaddr ...:e5
inet addr:xxx.yyy.234.195 Bcast:xxx.yyy.234.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:271 errors:0 dropped:49 overruns:0 frame:0
TX packets:199 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:47373 (46.2 KiB) TX bytes:26125 (25.5 KiB)
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
# ip route
default via xxx.yyy.142.1 dev eth0 metric 202
default via xxx.yyy.234.1 dev wlan0 metric 303
xxx.yyy.142.0/24 dev eth0 proto kernel scope link src xxx.yyy.142.226 metric 202
xxx.yyy.234.0/24 dev wlan0 proto kernel scope link src xxx.yyy.234.195 metric 303
# ip rule
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
Когда я пингую xxx.yyy.234.195, tcpdump
показывает:
listening on wlan0, link-type EN10MB (Ethernet), capture size 65535 bytes
16:34:31.664494 IP <My Computer> > raspberrypi: ICMP echo request, id 1, seq 1426, length 40
16:34:36.452314 IP <My Computer> > raspberrypi: ICMP echo request, id 1, seq 1427, length 40
16:34:41.451536 IP <My Computer> > raspberrypi: ICMP echo request, id 1, seq 1428, length 40
16:34:46.464017 IP <My Computer> > raspberrypi: ICMP echo request, id 1, seq 1429, length 40
Я работаю в университетской сети, поэтому я не могу ничего изменить в сети. У меня недостаточно опыта работы с сетями, чтобы самому разобраться в этом, поэтому я ценю любую помощь, которую могу получить.
Заранее спасибо.
Похоже, проблема с маршрутизацией.
У вас есть два шлюза по умолчанию на RasPi, и у него есть прямые маршруты через eth0 и wlan0 в их соответствующие сети. Если вы отправляете эхо-запрос на адрес wlan0 с хоста, который имеет адрес в сети eth0, RasPi попытается отправить ответ от eth0, а не wlan0 (но с исходным адресом wlan0).
Если между сетями существует межсетевой экран с отслеживанием состояния, он может нарушить такую асимметричную маршрутизацию.
Попробуйте отключить eth0 (выключите его, вытащите кабель или что-то в этом роде), чтобы удалить избыточные маршруты, затем снова пропингуйте адрес wlan.