zimang 发表于 2014-05-07 11:14

ICMP reply packets 不能在PREROUTING chain被set-mark

请问一下为啥ICMP reply packets 不能在PREROUTING chain被set-mark

iptables -t nat -I PREROUTING -d ! 192.168.0.1-j PNAT --set-mark 0x2511

后面我在PREROUTING链最后和NF_IP_LOCAL_IN打印nfmark值,为啥除了ICMP reply包之外的所有包都被打上了mark?

RAW socket 的包没有经过v4协议栈?

ping socket 创建:
if ((sock = socket(AF_INET, SOCK_RAW, 1))

thanks!

lokyes 发表于 2014-05-07 22:28

是自己写的ping程序 ?

lonelyair 发表于 2014-05-08 09:21

-j PNAT是什么意思?

zimang 发表于 2014-05-08 09:48

Busybox 的ping回复 2# lokyes


   

zimang 发表于 2014-05-08 09:49

回复 3# lonelyair


    PNAT是我们自己写的一个处理链,里面没有处理ICMP 消息。

lonelyair 发表于 2014-05-08 09:59

回复 5# zimang


    你的处理链set mark是不是PREROUTING第一个规则,看看是不是被之前的处理过了。

zimang 发表于 2014-05-08 14:45

回复 6# lonelyair


   -I PREROUTING 是在最前面的,后面的都没有处理。

lonelyair 发表于 2014-05-08 15:15

-I PREROUTING 1才是最前面

zimang 发表于 2014-05-08 18:29

回复 8# lonelyair


    还是一样的结果。

lonelyair 发表于 2014-05-09 08:52

最好抓包看看没有ICMP包,有没有可能是那个地方已经把包过滤了
另外单独试下打icmp包的mark,-p icmp --icmp-type 0
页: [1] 2
查看完整版本: ICMP reply packets 不能在PREROUTING chain被set-mark