我的主机充当路由器,有两个网络接口enp1s0
(1 个主机连接到 ip 192.168.10.20
)和enp2s0
。enp1s0
用于接收 UDP 包,并且enp2s0
通常连接有监听主机。
当我使用以下命令激活nftables
日志记录时:
table ip filter {
chain logging {
type filter hook prerouting priority filter; policy accept;
ip saddr 192.168.10.20 log prefix "ip-filter1-"
}
}
我看到所有数据包都被192.168.10.20
记录下来,而且我还在日志中看到了这些包的实际目标是什么(因为我的主机只是路由器并传递这些包)。
尽管如此,当我尝试在家庭中做一些非常低级别的重定向时netdev
,日志不再打印(我认为数据包被丢弃了,不是吗?)
table netdev filter { # handle 3
chain mod { # handle 15
type filter hook ingress device "enp1s0" priority -500; policy accept;
ether daddr set c4:00:ad:99:67:c7 ip daddr set 192.168.10.120 # handle 16
}
}
这是我的ip a
...
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether c4:00:ad:99:67:c7 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.120/24 brd 192.168.10.255 scope global noprefixroute enp1s0
valid_lft forever preferred_lft forever
inet6 fe80::c600:adff:fe99:67c7/64 scope link
valid_lft forever preferred_lft forever
3: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether c4:00:ad:99:67:c8 brd ff:ff:ff:ff:ff:ff
inet 10.20.75.50/24 brd 10.20.75.255 scope global dynamic noprefixroute enp2s0
valid_lft 682026sec preferred_lft 682026sec
inet6 fe80::c600:adff:fe99:67c8/64 scope link
valid_lft forever preferred_lft forever
ip route
给我:
default via 10.20.75.254 dev enp2s0 proto dhcp metric 101
10.20.75.0/24 dev enp2s0 proto kernel scope link src 10.20.75.50 metric 101
169.254.0.0/16 dev enp1s0 scope link metric 1000
192.168.10.0/24 dev enp1s0 proto kernel scope link src 192.168.10.120 metric 100
为什么我将 mac 地址和 ip 地址重写为本地 NIC 的值后不再记录数据包?
答案1
我通过使用以下netdev
家庭解决了这个问题nftables
:
这是 NIC 上的软件包重定向到本地接口的方式:
table netdev filter {
chain redir {
type filter hook ingress device "enp1s0" priority filter; policy accept;
ether daddr set c4:00:ad:99:67:c7 ip daddr set 192.168.10.120 udp dport set 4500 meta pkttype set host
}
}
必须打开混杂模式,以便 NIC 转发不适合它的数据包:
ip link set enp1s0 promisc on