iptables_dscp使用手册

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.问:如何查看帮助文档?

答:执行sh iptables_dscp.sh -h

2.问:如何打标?

答:比如针对tcp协议,目的端口是22的数据包打上dscp标签0x2A.

# sh iptables_dscp.sh -p tcp -r 22 0x2A

Set dscp value with command:

iptables -A POSTROUTING -t mangle -p tcp --dport 22 -j DSCP --set-dscp 0x2A

3.问:如何查看第二条中所设置的规则。

答:执行iptables命令:

# iptables -S POSTROUTING -t mangle(第二条)

-P POSTROUTING ACCEPT

-A POSTROUTING -p tcp -m tcp --dport 22 -j DSCP --set-dscp 0x2a

4.问:如果设置错了,如何删除规则?

答:比如删除第二步中所设置的规则。

第一种方法使用iptables命令只删除一条规则。

# iptables -D POSTROUTING -t mangle -p tcp --dport 22 -j DSCP --set-dscp 0x2A

第二种方法使用iptables命令删除所有规则。

# iptables -F -t mangle

5问:执行下面的命令,出现错误是什么意思。

# sh iptables_dscp.sh -l 22 -r 4444 0x21

Error: Protocol is not set, but you are using local_port/remote_port!

答:如果设置本地端口或者目的端口,则必须设置协议类型。因为不是所有的协议都有源端口和目的端口的。比如icmp协议。

修正方法是添加-p参数。

6.问:执行下面的命令,出现错误是什么意思。

# sh iptables_dscp.sh -p tcp -l 22 -r 4444 -v 0x21

Error: '-v' is used with DSCP_Value setting!

答:命令行中指定了-v参数来检查源端口是22 ,目的端口是4444的tcp流是否已经成功

设置dscp值了。则就不需要再设置dscp值,由此将命令行中的0x21删除,就可以了。

7.问:执行下面的命令,为何程序一直不退出。

# sh iptables_dscp.sh -p tcp -l 22 -r 4444 -v

Capture packets with below command:

tcpdump -nn -v -c 2 tcp and src port 22 and dst port 4444

tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes ........

答:这是因为tcpdump必须按照指定的规则捕获数据包,如果捕获不到,则一直执行,程序不退出。所以,请检查是否有相应的数据包;或者检查参数是否设置错误。

8.问:如何判断检查成功呢?

答:检查成功的话,会有提示。比如:

#sh iptables_dscp.sh -p tcp -s 192.168.0.116 0x2d(首先打标)

# sh iptables_dscp.sh -p tcp -s 192.168.0.116 -v

Capture packets with below command:

tcpdump -nn -v -c 1 tcp and src host 192.168.0.116

tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

14:59:32.766194 IP (tos 0xb4, ttl 64, id 61120, offset 0, flags [DF], proto TCP (6), length 60)

192.168.0.116.32953 > 192.168.0.101.22: Flags [S], cksum 0xd6a0 (correct), seq 1162215245, win 5840, options [mss 1460,sackOK,TS val 24514957 ecr 0,nop,wscale

7], length 0

1 packets captured

2 packets received by filter

0 packets dropped by kernel

Validate Result: OK

9.问:为何打的dscp标是0x2d,而tcpdump看到的tos值是0xb4呢?

答; 因为tos在IP头部占了8位(bit), 而dscp只是tos的高6位。dscp的值是这个6bit 的16机制数。而tos是8个bit的16机制数。所以,看到的结果不同。但是tos的高6位等于dscp值。即dscp=tos>>2.

10.问:为何执行下面的验证规则,会提示失败呢?

#sh iptables_dscp.sh -p tcp -r 22 0x2a

#sh iptables_dscp.sh -p tcp -r 22 -v

Capture packets with below command:

tcpdump -nn -v -c 1 tcp and dst port 22

tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

14:55:45.802048 IP (tos 0x10, ttl 64, id 62811, offset 0, flags [DF], proto TCP (6), length 100)

192.168.0.101.53371 > 192.168.0.116.22: Flags [P.], cksum 0x9193 (correct), seq 2446306066:2446306114, ack 2929214289, win 107, options [nop,nop,TS val 232661334 ecr 24446132], length 48

1 packets captured

1 packets received by filter

0 packets dropped by kernel

Validate Result: FAIL

答:打标是对目的端口是22的发送出去的tcp流打上dscp值0x2a。但是因为捕获的条件限制,tcpdump捕获了收到的数据包。所以导致tos值不匹配。由此,建议确认的时候,提供更严格的匹配条件,比如源IP地址,目的IP地址等。

相关文档
最新文档