我有一个运行 Linux 的路由器。它的网络配置有一个到我的 ISP 的默认路由,用于公共 Internet 访问。我现在需要阻止访问指定的目标网络。
原始路由表:
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
Run Code Online (Sandbox Code Playgroud)
假设74.1.1.0/24是我要禁止路由的网络。我希望连接到该路由器的每个客户端都能获得该网络中某个地址的“网络无法访问”。
有没有办法做到这一点?
使用iproute2。
ip route add unreachable 74.1.1.0/24
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果您试图拒绝到该网络的出站流量,最好使用路由来拒绝该网络,而不是 netfilter。对于inbound,使用 netfilter 更惯用,就像这里的另一个答案一样,但是用--src
代替--dst
,最好使用 ICMP admin disabled ,或者只是 drop 。您可以使用 RPDB(请参阅ip-rule(8)
,以实现相同的效果,但可能看起来不合适。
不要使用包中的 ifconfig、route 或其他工具net-tools
;他们早就被弃用了。
您可以确认路由器本身将使用什么作为路由决策。
$ ip route get 74.1.1.0/24
RTNETLINK answers: Network is unreachable
Run Code Online (Sandbox Code Playgroud)
请注意,“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
Run Code Online (Sandbox Code Playgroud)
如果涉及的用户空间有缺陷并且挂起而不是立即返回错误,那就是另一个问题。内核无法弥补这种有缺陷的用户空间。
归档时间: |
|
查看次数: |
7237 次 |
最近记录: |