在 iptables 中使用 --to-destination 192.168.0.30 重定向未知的 mac 客户端

在 iptables 中使用 --to-destination 192.168.0.30 重定向未知的 mac 客户端

我一直使用 iptables 来阻止来自互联网网关的所有未知 mac 地址

EXT_DEV=wlan0
INT_DEV=eth0
INT_NET=192.168.0.0/20
modprobe ip_conntrack
modprobe ip_conntrack_ftp
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
conntrack -F
iptables -P INPUT   DROP
iptables -P OUTPUT  DROP
iptables -P FORWARD DROP
MACS=("${MACS[@]}" "00:00:00:00:00:00");   # known mac addresses
MACS=("${MACS[@]}" "11:11:11:11:11:11");   # and many more...
for MAC in ${MACS[@]}; 
do 
    iptables -A INPUT -m mac --mac-source $MAC -j ACCEPT
    iptables -A FORWARD -m mac --mac-source $MAC -j ACCEPT
done
##################################################################
# and here follows the lines that seem not to do as I would expect
iptables -A PREROUTING -t mangle -i $INT_DEV -p tcp --dport 80 -j MARK --set-mark 99
iptables -A PREROUTING -t mangle -m mark --mark 99 -j TRACE
iptables -t nat -A PREROUTING -m mark --mark 99 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.30
iptables -t filter -A FORWARD -m mark --mark 99 -j DROP
# upto here are the troubled lines 
##################################################################
iptables -A OUTPUT -o $INT_DEV -s $INT_NET -d $INT_NET -j ACCEPT
iptables -A OUTPUT  -o $EXT_DEV -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o $EXT_DEV -s $INT_NET -j MASQUERADE
iptables -A INPUT   -i $EXT_DEV -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i $EXT_DEV -m state --state RELATED,ESTABLISHED -j ACCEPT

现在,当我尝试使用以下命令打印包时:
xtables-monitor --trace | grep "MARK=0x63" | grep "SRC=192.168.0.134" 它会显示所有标记的包(我假设标记 99 显示为 MARK=0x63):

数据包:0 36288a1d IN=eth0 OUT=eth0 MACSRC=AA:AA:AA:AA:AA:AA:AA MACDST=BB:BB:BB:BB:BB:BB MACPROTO=0800 SRC=192.168.0.134 DST=192.168.0.30 LEN=60 TOS=0x0 TTL=63 ID=12174DF SPORT=54228 DPORT=80 SYN MARK=0x63
以及更多...

但是,我的测试箱 192.168.0.134 的浏览器没有收到 192.168.0.30 的内容,而是显示“连接超时”

是什么原因导致重定向在这里不起作用?
我该怎么做才能排除故障以找出我在这里做错的地方?

答案1

执行发夹重定向时,您不仅需要更改目标地址,还需要更改源地址。因为如果不这样做,目标服务器将尝试直接回复源,而源永远不会有尝试联系目标服务器的记录。

您需要添加一条规则-j SNAT,我认为是在表POSTROUTING的链中nat

相关内容