У меня есть домашний маршрутизатор 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 вашего маршрутизатора.