2

У меня есть роутер под управлением Linux. Его сетевая конфигурация имеет маршрут по умолчанию к моему провайдеру для общего доступа в Интернет. Теперь мне нужно запретить доступ к указанной сети назначения.

Исходная таблица маршрутов:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         172.16.6.254    0.0.0.0         UG    0      0        0 eth0.2
10.99.0.0       *               255.255.255.0   U     0      0        0 tap0

Предполагая, что 74.1.1.0/24 - это сеть, которую я хочу запретить маршрутизацию. Я надеюсь, что каждый клиент, подключенный к этому маршрутизатору, получит «Сеть недоступна» для адреса в этой сети.

Есть какой-либо способ сделать это?

4 ответа4

6

Используйте iproute2.

ip route add unreachable 74.1.1.0/24

В этом случае, если вы пытаетесь запретить исходящий трафик в эту сеть, лучше использовать маршрутизацию для запрета этой сети, а не сетевой фильтр. Для входящего, более идиоматично использовать netfilter, как в другом ответе здесь, но с --src вместо --dst , и лучше использовать запрещенный администратор ICMP, или просто удалить вместо этого. Вы можете использовать RPDB (см. Ip ip-rule(8) для достижения того же эффекта, но, вероятно, будет выглядеть неуместно.

Не используйте ifconfig, route или другие инструменты из пакета net-tools ; они давно устарели.

Вы можете подтвердить, что сам маршрутизатор будет использовать в качестве решения о маршрутизации.

$ ip route get 74.1.1.0/24
RTNETLINK answers: Network is unreachable

Обратите внимание, что глагол «get» отличается от «show» (или «list»), поскольку он «вычисляет» решение о маршрутизации, а не просто фильтрует и перечисляет записи в таблице маршрутизации.

Хосты на вашей стороне сети получат сеть назначения ICMP недоступной.

$ ping 74.1.1.1 -c 1
PING 74.1.1.1 (74.1.1.1) 56(84) bytes of data.
From 172.16.6.254 icmp_seq=1 Destination Net Unreachable

--- 74.1.1.1 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0.7ms
$ echo $?
1

Если задействованное пространство пользователя неисправно и зависает, а не возвращает ошибку немедленно, это еще одна проблема. Ядро не может компенсировать такое ошибочное пространство пользователя.

4

Вы можете использовать netfilter

iptables -A FORWARD --dst 74.1.1.0/24 -j REJECT --reject-with icmp-net-unreachable

man iptables говорит следующее о параметре --reject-with

--reject-with type
     The type given can be icmp-net-unreachable, icmp-host-unreachable,
     icmp-port-unreachable,  icmp-proto-unreachable,  icmp-net-prohibited,
     icmp-host-prohibited  or  icmp-admin-prohibited  (*)  which  return  the
     appropriate  ICMP  error  message (port-unreachable is the default).  The
     option tcp-reset can be used on rules which only match the TCP protocol:
     this causes a TCP RST packet to be sent back.  This is mainly useful for
     blocking ident (113/tcp) probes which frequently occur when sending mail to
     broken mail hosts (which won't accept your mail otherwise)
1

Добавьте маршрут, указывающий на lo для этой подсети:

route add -net 74.1.1.0/24 gw 127.0.0.1 lo

У команды ip есть параметр blackhole я только что узнал:

ip route add blackhole 74.1.1.0/24

Читать дальше

Похоже, есть опция reject - посмотрите, делает ли это то, что вам нужно:

route add -net 74.1.1.0/24 reject

0

REJECT = стучать в дверь, ты кричишь, уходи!

DROP = стук в дверь, вы сидите спокойно, и посетитель уходит,: теория?..: P

зависит от того, что вы пытаетесь достичь, мое мнение

REJECT говорит кому-то, чтобы он попытался продолжить беседу, пока ACCEPT не будет достигнут, DROP ничего не говорит, для того, чтобы сделать больше разговор ЗАКРЫТЫМ:up2you:).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .