Я пишу небольшое приложение для туннелирования с интерфейсами уровня 2 (TAP) в качестве конечных точек. В ходе тестирования этого на OSX я заметил, что получаю все виды трафика, которые я не ожидал в туннеле, как когда туннель работал на одной машине с OSX, так и когда я туннелировал между OSX и Linux. Я хотел бы отфильтровать этот трафик, и мне интересно, как это сделать лучше всего.
Туннель выглядит следующим образом (обратите внимание, что обе конечные точки могут находиться на одной машине):
tap0 -> tunnel app -> UDP tunnel -> tunnel app -> tap1
Примечательным трафиком являются пакеты Bonjour на порту назначения 5353 и ICMP/IGMP. Многоадресная рассылка включена на интерфейсе TAP. Я бы хотел заблокировать такой трафик. Мои мысли по этому поводу:
- Отключите многоадресную рассылку на интерфейсе (не работает в OSX, см. ниже)
- Используйте
ebtables
- Разбирать пакеты, исходящие от интерфейса внутри приложения туннеля, и игнорировать их там.
Есть ли лучший/более простой способ сделать это?
Я попытался отключить многоадресную рассылку на интерфейсе OSX (назовем это tap0), но получаю сообщение об ошибке.
$ ifconfig tap0 -multicast
ifconfig: -multicast: bad value
РЕДАКТИРОВАТЬ: после небольшого поиска оказалось, что UNIX и BSD ifconfig имеют разные параметры. Есть ли другой способ заблокировать многоадресный/ICMP-трафик на заданном интерфейсе в OSX/BSD?
вот вывод ifconfig...
OSX (с osxtuntap):
$ ifconfig tap1
tap1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 92:d9:e6:65:5a:8c
inet 10.0.0.2 netmask 0xffffff00 broadcast 10.0.0.255
open (pid 17121)
Линукс:
$ ifconfig tunX
tunX Link encap:Ethernet HWaddr 4a:29:02:e6:b0:b9
inet addr:10.0.0.1 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: fe80::4829:2ff:fee6:b0b9/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)