Как маршрутизировать 3 компьютера в беспроводной сети ad-hoc?

Как маршрутизировать 3 компьютера в беспроводной сети ad-hoc?

У меня есть 3 компьютера: 192.168.2.1, 192.168.2.2, 192.168.2.4, подключенных к беспроводной сети ad-hoc. Я хочу, чтобы весь трафик с 192.168.2.1 проходил через 192.168.2.2, когда он общается с 192.168.2.3. По сути

192.168.2.1 <---> 192.168.2.2 <---> 192.168.2.3

Как изменить таблицы маршрутизации?

Я пытался:

[email protected]:   sudo ip route add 192.168.2.3 via 192.168.2.2 dev wlan0

[email protected]:   sudo ip route add 192.168.2.1 via 192.168.2.2 dev wlan0 

Я включил переадресацию на 192.168.2.2, и она работает. Но когда я делаю traceroute с 192.168.2.1, похоже, что он идет прямо на 192.168.2.3. Теперь я добавил еще несколько узлов (см. таблицу маршрутизации 192.168.2.1 ниже) и я все еще получаю один переход, когда я делаю traceroute. Но если я войду в 192.192.2.2 и проведу traceroute 192.168.2.5, он даст мне правильное количество переходов.

**ROUTE TABLE OF 192.168.2.1**

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    202    0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     303    0        0 wlan0
192.168.1.0     0.0.0.0         255.255.255.0   U     202    0        0 eth0
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 wlan0
192.168.2.3     192.168.2.2     255.255.255.255 UGH   0      0        0 wlan0
192.168.2.4     192.168.2.2     255.255.255.255 UGH   0      0        0 wlan0
192.168.2.5     192.168.2.2     255.255.255.255 UGH   0      0        0 wlan0


**ROUTE TABLE OF 192.168.2.2**

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
169.254.0.0     0.0.0.0         255.255.0.0     U     303    0        0 wlan0
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 wlan0
192.168.2.4     192.168.2.3     255.255.255.255 UGH   0      0        0 wlan0
192.168.2.5     192.168.2.3     255.255.255.255 UGH   0      0        0 wlan0

Возможно ли, что узлы выполняют какое-то кэширование?

РЕДАКТИРОВАТЬ;Сейчас у меня всего 10 узлов, и вот вывод моей трассировки

traceroute -4 192.168.2.10

traceroute to 192.168.2.10 (192.168.2.10), 30 hops max, 60 byte packets
1  192.168.2.2 (192.168.2.2)  10.140 ms  10.324 ms  10.398 ms
2  192.168.2.3 (192.168.2.3)  17.292 ms  17.483 ms  17.564 ms
3  192.168.2.4 (192.168.2.4)  25.646 ms  25.708 ms  26.110 ms
4  192.168.2.5 (192.168.2.5)  34.156 ms  34.416 ms  34.501 ms
5  192.168.2.6 (192.168.2.6)  44.131 ms  44.479 ms  44.560 ms
6  192.168.2.7 (192.168.2.7)  51.382 ms  43.074 ms  46.144 ms
7  192.168.2.8 (192.168.2.8)  46.129 ms  43.374 ms  53.956 ms
8  192.168.2.9 (192.168.2.9)  58.156 ms  83.625 ms  83.642 ms
9  192.168.2.10 (192.168.2.10)  83.565 ms  84.008 ms  89.355 ms

решение1

Возможно, ваш маршрутизатор сообщает другим отправлять напрямую с помощью пакета перенаправления ICMP. Поскольку они все находятся в одной сети, он знает, что это должно быть возможно.

Я настроил маршруты, подобные вашим, между тремя машинами Linux (mach1 <-> mach3 <-> mach2) и проверил с помощью ping:

mach1# ping mach2 
PING mach2 (x.x.x.237) 56(84) bytes of data.
From mach3 (x.x.x.238): icmp_seq=1 Redirect Host(New nexthop: mach2 (x.x.x.237))
64 bytes from mach2 (x.x.x.237): icmp_seq=1 ttl=63 time=0.537 ms

Tcpdump на mach3 и mach2 показывает, что mach3 отправляет перенаправление на mach1, и после этого весь трафик идет напрямую между mach1 и mach2.

Перенаправления можно считать немного подозрительными, так как их можно использовать и в противоположном направлении: для отправки трафика через третью машину, через посредника. См. напримерhttps://askubuntu.com/questions/118273/какие-перенаправления-icmp-и-следует-ли-их-блокировать

Отправку и получение перенаправлений можно контролировать с помощью некоторых sysctl:

net.ipv4.conf.*.accept_redirects
net.ipv4.conf.*.send_redirects

После установки net.ipv4.conf.eth0.send_redirects на ноль на маршрутизаторе и сброса маршрутов весь трафик прошел через mach3.

Теперь я проверил это в коммутируемой сети (и с виртуальными машинами), так что я не уверен, что наличие WLAN что-то меняет. Я не думаю, что это должно измениться, если машины обрабатывают только кадры, предназначенные для их Ethernet-адреса. Но в теории можно было бы выбрать каждый кадр из эфира.

решение2

Прежде всего, это звучит какпроблема XY. Что вы пытаетесь сделать? Я совершенно уверен, что маршрутизация сетевого трафика таким образом вряд ли будет хорошим решением вашей проблемы.

Было сказано, что,

В ваших таблицах маршрутизации все еще есть маршрут для 192.168.2.0/24. Это означает, 192.168.2.1что есть два маршрута для достижения 192.168.2.2, поэтому подсистема маршрутизации ядра рассматривает оба, видит, что один из них является прямым маршрутом, а другой — нет, и использует прямой маршрут (потому что он должен быть дешевле).

Если вы этого не хотите, у вас есть два варианта:

  • Удалить запись в таблице маршрутизации для 192.168.2.0/24. Это означает, что вам нужно создать записи в таблице маршрутизации длявсехосты в сети, включая те, к которым вы хотите обратиться напрямую.
  • Создайте два сетевых диапазона /24 и дайте хосту, который в данный момент является 192.168.2.2IP-адресом в обоих диапазонах (который не требует отдельного сетевого интерфейса). Затем вы можете заставить все остальные хосты маршрутизировать пакеты через этот хост.

Опять же, я не уверен, что это лучший путь вперед. Пожалуйста, объясните, чего вы пытаетесь добиться.

Связанный контент