Wie markiere ich ein Netzwerk als nicht erreichbar?

2

Ich habe einen Router mit Linux. Die Netzwerkkonfiguration hat eine Standardroute zu meinem ISP für den öffentlichen Internetzugang. Ich muss jetzt den Zugriff auf ein angegebenes Zielnetzwerk verhindern.

Ursprüngliche Routentabelle:

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

Angenommen, 74.1.1.0/24 ist das Netzwerk, das ich Routing verbieten möchte. Ich hoffe, dass jeder an diesen Router angeschlossene Client für eine Adresse in diesem Netzwerk "Netzwerk nicht erreichbar" erhält.

Gibt es sowieso das zu tun?

Lingfeng Xiong
quelle
null Leitet das Netzwerk auf dem Standardgateway weiter.
Hennes
@GregoryA.Lussier, danke für deinen Link. Der Client meldet jedoch nur "Timeout" anstelle von "Zielnetzwerk nicht erreichbar".
Lingfeng Xiong
Verwenden Sie dann das REJECT- Ziel von iptables, siehe folgenden Link: linuxtopia.org/Linux_Firewall_iptables/x4550.html
user7429642

Antworten:

6

Verwenden Sie iproute2.

ip route add unreachable 74.1.1.0/24

In diesem Fall ist es besser, das Routing zu verwenden, um den ausgehenden Datenverkehr zu diesem Netzwerk zu verweigern, als den Netzfilter. Für Inbound ist es idiomatischer, netfilter zu verwenden, wie in einer anderen Antwort hier, aber mit --srcstatt --dstund besser mit verbotenem ICMP-Administrator oder einfach fallen zu lassen. Sie können die RPDB verwenden (siehe ip-rule(8), um den gleichen Effekt zu erzielen, wird aber wahrscheinlich fehl am Platz aussehen).

Verwenden Sie nicht ifconfig, route oder andere Tools aus dem net-toolsPaket. Sie sind längst veraltet.

Sie können bestätigen, was der Router selbst als Routingentscheidung verwendet.

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

Beachten Sie, dass das Verb 'get' nicht mit 'show' (oder 'list') identisch ist, da es die Routing-Entscheidung 'berechnet', anstatt nur Einträge in der Routing-Tabelle zu filtern und aufzulisten.

Bei Hosts auf Ihrer Seite des Netzwerks ist das ICMP-Zielnetz nicht erreichbar.

$ 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

Wenn der betroffene Benutzerbereich defekt ist und nicht sofort einen Fehler zurückgibt, ist dies ein weiteres Problem. Der Kernel kann solch einen fehlerhaften Benutzerraum nicht kompensieren.

pilona
quelle
4

Sie können netfilter verwenden

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

man iptablessagt folgendes über die --reject-withOption

--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)
user49740
quelle
1

Fügen Sie eine Route hinzu, die auf lodieses Subnetz verweist :

route add -net 74.1.1.0/24 gw 127.0.0.1 lo

Der ipBefehl hat einen blackholeParameter, über den ich gerade herausgefunden habe:

ip route add blackhole 74.1.1.0/24

Lesen Sie mehr .

Sieht so aus, als gäbe es eine rejectOption - sehen Sie, ob das das tut, was Sie brauchen:

route add -net 74.1.1.0/24 reject

LawrenceC
quelle
1
Bei einer Blackhole-Route werden die an das Zielnetzwerk gesendeten Pakete stillschweigend verworfen.
Stattdessen wird
Siehe oben Bearbeitungen.
LawrenceC
Ja, sieht so aus ..!
user7429642
@ultrasawblade Ich habe diesen Befehl ausprobiert und es scheint, dass die Clients nur "Zeitüberschreitung" melden, stattdessen das erwartete "Netzwerk nicht erreichbar" :-(
Lingfeng Xiong
0

REJECT = klopfe an die Tür, du schrei weg!

DROP = klopfe an die Tür, du sitzt leise und der Besucher geht,: Theorie? ..: P

Kommt darauf an, was du erreichen willst, meine Meinung ist

REJECT sagt zu jemandem, er solle versuchen, die Konversation fortzusetzen, bis ACCEPT erreicht ist. DROP sagt nichts, um die Konversation zu beenden. CLOSED,: up2you :).

PaKeTkILLer
quelle
1
Dies scheint die Frage nicht zu beantworten.
Blackwood