如何将网络标记为不可访问?

如何将网络标记为不可访问?

我有一台运行 Linux 的路由器。它的网络配置中有一个到我的 ISP 的默认路由,用于公共互联网访问。我现在需要阻止访问指定的目标网络。

原始路由表:

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 是我想要禁止路由的网络。我希望连接到此路由器的每个客户端都会收到该网络中某个地址的“网络不可达”信息。

有什么办法可以做到这一点吗?

答案1

使用 iproute2。

ip route add unreachable 74.1.1.0/24

在这种情况下,如果你想否认出站流量到该网络,最好使用路由来拒绝该网络,而不是使用 netfilter。对于入站,使用 netfilter 更符合习惯,就像这里的另一个答案一样,但要用--src而不是--dst,并且最好使用 ICMP admin banned,或者直接使用 drop。您可以使用 RPDB(请参阅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

如果所涉及的用户空间有缺陷并挂起而不是立即返回错误,那就是另一个问题。内核无法弥补这种有缺陷的用户空间。

答案2

您可以使用 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)

答案3

添加指向该子网的路由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

答案4

REJECT=敲门,你就大叫走开!。

DROP = 敲门,你静静地坐着,然后访客离开,:theory?..:P

取决于你想要实现什么,我的意见是

REJECT 表示尝试继续对话直至 ACCEPT 达成,DROP 则不表示任何意思,因此将结束任何对话,:up2you:)。

相关内容