Назад | Перейти на главную страницу

Маршрутизатор Linux - как отправлять сообщения о недоступности icmp клиентам локальной сети

У меня есть домашний маршрутизатор Linux с eth0 (192.168.0.2/24) и мост br0 для клиентов LAN (192.168.1.1/24). Мост br0 содержит eth1 (проводной) и eth2 (беспроводной).

Маршрутизатор направляет весь трафик LAN через eth0 (192.168.0.2) на маршрутизатор ADSL (192.168.0.1) через SNAT, а оттуда в Интернет. (На данный момент мне интересно, смогу ли я сделать это без SNAT, но сейчас это не проблема.)

Я хотел бы знать, как клиенты LAN могут получать сообщения icmp для недоступных хостов. Если клиент LAN выполняет эхо-запрос неиспользуемого IP-адреса в своей собственной подсети (например, 192.168.1.123), я вижу сообщения о недоступности хоста назначения. Как я могу получить эти сообщения для других недостижимых адресов, которые не находятся в подсети клиента LAN? Следует ли мне добавить все немаршрутизируемые, неизвестные сети в качестве правил iptables или, возможно, добавить их с iproute2 в качестве недоступных адресов на маршрутизаторе Linux?

Например, 10.0.0.1 - это адрес, который я не использую. Если я выполняю трассировку от LAN-клиента до 10.0.0.1, я вижу, что эти пакеты перемещаются как таковые:

# traceroute 10.0.0.1
traceroute to 10.0.0.1 (10.0.0.1), 30 hops max, 52 byte packets
 1  linuxrouter (192.168.1.1)  0.247 ms  0.143 ms  0.126 ms
 2  adslrouter (192.168.0.1)  0.526 ms  0.526 ms  0.322 ms
 3  isp.hop1 (194.109.w.x)  33.250 ms  33.376 ms  33.337 ms
 4  isp.hop2 (194.109.y.z)  61.811 ms !N  32.700 ms !N  32.639 ms !N

(Я не знаю, почему самый первый прыжок моего ISP пересылает их)

Вместо этого я бы предпочел, чтобы маршрутизатор linux отклонял любой адрес rfc1918. Какие лучшие практики?

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

В случае 10.0.0.1 провайдер, вероятно, не фильтрует диапазон RFC 1918 до перехода 3, но если сброс происходит из-за фильтра ACL, он просто отбрасывает пакеты без отправки ответа о недоступности.

Чтобы ваш Linux-маршрутизатор отбрасывал пакеты и отбрасывал недостижимые, добавьте reject маршрут:

route add -net 10.0.0.0 netmask 255.0.0.0 reject

Вы захотите сделать это постоянным - где вам это нужно, зависит от типа Linux вашего маршрутизатора.