更改路由数据包的源 MAC 地址

更改路由数据包的源 MAC 地址

我有一个 Linux 机器,它有一个网络接口,并且启用了 IP 转发。假设我的 IP 地址是192.168.1.1,MAC 地址是11:11:11:11:11:11。当一个不是发往我主机的数据包到达时,它会被内核路由,并且传出的数据包的源 MAC 地址是11:11:11:11:11:11,即我主机的 MAC 地址。我想改变这种行为,并为所有路由的数据包设置一个预定义的源 MAC 地址。是否可以使用 Linux 中可用的标准网络工具实现这一点?如果不能,是否可以使用 pcap 之类的库在用户空间中实现这一点?

答案1

对于使用 iptables 标记为 0x2 值的数据包:

IP_ADDR_ETH0=`ifconfig eth0 | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 | tr -d '\n'`
iptables -t mangle -A OUTPUT -s ${IP_ADDR_ETH0} -p udp --match multiport --dports 319,320 -o eth0 -j MARK --set-mark 2

tc filter add dev eth0 parent 15:0 protocol ip prio 1 handle 0x2 fw action pedit ex munge eth src set ${MAC_ADDR_ETH1} pipe \
action pedit ex munge ip src set ${IP_ADDR_ETH1}

相关内容