我正在使用 iptables 来标记包并希望根据标记进行路由。
首先我添加了ip规则:
sudo ip rule add fwmark 1 prohibit
Run Code Online (Sandbox Code Playgroud)
(“禁止”仅用于测试,稍后我将其更改为某个路由表。)
然后我开始标记包裹:
sudo iptables -A OUTPUT -d 192.168.1.0/24 -j MARK --set-mark 1
Run Code Online (Sandbox Code Playgroud)
但是电脑仍然可以访问192.168.1.0/24网络。
经过长时间的谷歌搜索和挣扎,我尝试过:
sudo iptables -t mangle -A OUTPUT -d 192.168.1.0/24 -j MARK --set-mark 1
Run Code Online (Sandbox Code Playgroud)
它有效并且连接被阻止。
在第一种情况下,使用过滤器的默认表。所以我的问题是 mangle table 和 filter table 之间有什么区别?在什么情况下应该使用哪一个?据我了解,所有这些表都会在路由策略之前进行查询,那么为什么过滤表不能正常工作呢?
在/etc/network/if-up.d/avahi-autoipd
我系统的脚本中,我找到了这样的语句:
case "$ADDRFAM" in
inet|NetworkManager) ;;
*) exit 0
esac
case "$METHOD" in
static|dhcp|NetworkManager) ;;
*) exit 0
esac
Run Code Online (Sandbox Code Playgroud)
管道字符|
看起来像逻辑“或”,但我在指南中找不到这个规则。我只能找到|
用作命令管道和算术整数的“按位或”。
谁能告诉我在这种情况下有什么用途?