当前第2页 返回上一页
请求报文经过的hook点顺序如下:
序号 | hook点 | 输入接口 | 输出接口 |
---|
1 | PREROUTING | ns1veth1 | 无 |
2 | PREROUTING | vrftest | 无 |
3 | FORWARD | vrftest | ns2veth1 |
4 | POSTROUTING | 无 | ns2veth1 |
应答报文经过的hook点顺序如下:
序号 | hook点 | 输入接口 | 输出接口 |
---|
1 | PREROUTING | ns2veth1 |
|
2 | PREROUTING | vrftest |
|
3 | FORWARD | vrftest | ns2veth1 |
4 | POSTROUTING | 无 | ns2veth1 |
本机访问外网
vrftest ping 1.1.1.1
1 2 3 4 5 6 7 8 9 | admin@ubuntu:~$ sudo ping 1.1.1.1 -I vrftest -c 1
ping: Warning: source address might be selected on device other than vrftest.
PING 1.1.1.1 (1.1.1.1) from 1.1.1.254 vrftest: 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=64 time=0.039 ms
--- 1.1.1.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.039/0.039/0.039/0.000 ms
admin@ubuntu:~$
|
查看log
1 2 3 4 5 6 7 | Nov 20 21:21:11 ubuntu kernel: [183224.956734] vrf-test-localoutIN= OUT=vrftest SRC=1.1.1.254 DST=1.1.1.1 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=35042 DF PROTO=ICMP TYPE=8 CODE=0 ID=34186 SEQ=1
Nov 20 21:21:11 ubuntu kernel: [183224.956740] vrf-test-postroutingIN= OUT=vrftest SRC=1.1.1.254 DST=1.1.1.1 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=35042 DF PROTO=ICMP TYPE=8 CODE=0 ID=34186 SEQ=1
Nov 20 21:21:11 ubuntu kernel: [183224.956745] vrf-test-localoutIN= OUT=ns1veth1 SRC=1.1.1.254 DST=1.1.1.1 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=35042 DF PROTO=ICMP TYPE=8 CODE=0 ID=34186 SEQ=1
Nov 20 21:21:11 ubuntu kernel: [183224.956746] vrf-test-postroutingIN= OUT=ns1veth1 SRC=1.1.1.254 DST=1.1.1.1 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=35042 DF PROTO=ICMP TYPE=8 CODE=0 ID=34186 SEQ=1
Nov 20 21:21:11 ubuntu kernel: [183224.956762] vrf-test-preroutingIN=ns1veth1 OUT= MAC=b2:f8:2a:13:31:75:6e:17:d5:b2:55:14:08:00 SRC=1.1.1.1 DST=1.1.1.254 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=323 PROTO=ICMP TYPE=0 CODE=0 ID=34186 SEQ=1
Nov 20 21:21:11 ubuntu kernel: [183224.956765] vrf-test-preroutingIN=vrftest OUT= MAC=b2:f8:2a:13:31:75:6e:17:d5:b2:55:14:08:00 SRC=1.1.1.1 DST=1.1.1.254 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=323 PROTO=ICMP TYPE=0 CODE=0 ID=34186 SEQ=1
Nov 20 21:21:11 ubuntu kernel: [183224.956769] vrf-test-localinIN=vrftest OUT= MAC=b2:f8:2a:13:31:75:6e:17:d5:b2:55:14:08:00 SRC=1.1.1.1 DST=1.1.1.254 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=323 PROTO=ICMP TYPE=0 CODE=0 ID=34186 SEQ=1
|
从log可以看出:
请求报文经过的hook点顺序如下:
序号 | hook点 | 输入接口 | 输出接口 |
---|
1 | OUTPUT | 无 | vrftest |
2 | POSTROUTING | 无 | vrftest |
3 | OUTPUT | 无 | ns1veth1 |
4 | POSTROUTING | 无 | ns1veth1 |
应答报文经过的hook点顺序如下:
序号 | hook点 | 输入接口 | 输出接口 |
---|
1 | PREROUTING | ns1veth1 | 无 |
2 | PREROUTING | vrftest | 无 |
3 | INPUT | vrftest | 无 |
本机访问本机,即环回
vrftest ping vrf接口地址9.9.9.9/24
添加如下netfilter规则:
1 2 3 4 5 6 7 | admin@ubuntu:~/vrftcpdump$ cat netfilter1.sh
sudo iptables -t mangle -A PREROUTING -s 9.9.9.9 -j LOG --log-prefix= "vrf-test-prerouting"
sudo iptables -t mangle -A FORWARD -s 9.9.9.9 -j LOG --log-prefix= "vrf-test-forward"
sudo iptables -t mangle -A POSTROUTING -s 9.9.9.9 -j LOG --log-prefix= "vrf-test-postrouting"
sudo iptables -t mangle -A INPUT -s 9.9.9.9 -j LOG --log-prefix= "vrf-test-localin"
sudo iptables -t mangle -A OUTPUT -s 9.9.9.9 -j LOG --log-prefix= "vrf-test-localout"
admin@ubuntu:~/vrftcpdump$
|
配置vrftest接口地址为9.9.9.9/24
1 2 3 4 5 6 7 8 9 | admin@ubuntu:~/vrftcpdump$ sudo ip addr add 9.9.9.9/24 dev vrftest
admin@ubuntu:~/vrftcpdump$ sudo ping 9.9.9.9 -I vrftest -c 1
PING 9.9.9.9 (9.9.9.9) from 9.9.9.9 vrftest: 56(84) bytes of data.
64 bytes from 9.9.9.9: icmp_seq=1 ttl=64 time=0.050 ms
--- 9.9.9.9 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.050/0.050/0.050/0.000 ms
admin@ubuntu:~/vrftcpdump$
|
查看log
1 2 3 4 5 6 7 8 | Nov 20 22:13:41 ubuntu kernel: [186374.589186] vrf-test-localoutIN= OUT=vrftest SRC=9.9.9.9 DST=9.9.9.9 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=39425 DF PROTO=ICMP TYPE=8 CODE=0 ID=34815 SEQ=1
Nov 20 22:13:41 ubuntu kernel: [186374.589192] vrf-test-postroutingIN= OUT=vrftest SRC=9.9.9.9 DST=9.9.9.9 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=39425 DF PROTO=ICMP TYPE=8 CODE=0 ID=34815 SEQ=1
Nov 20 22:13:41 ubuntu kernel: [186374.589202] vrf-test-preroutingIN=vrftest OUT= MAC=ca:f9:f0:37:4c:6c:ca:f9:f0:37:4c:6c:08:00 SRC=9.9.9.9 DST=9.9.9.9 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=39425 DF PROTO=ICMP TYPE=8 CODE=0 ID=34815 SEQ=1
Nov 20 22:13:41 ubuntu kernel: [186374.589204] vrf-test-localinIN=vrftest OUT= MAC=ca:f9:f0:37:4c:6c:ca:f9:f0:37:4c:6c:08:00 SRC=9.9.9.9 DST=9.9.9.9 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=39425 DF PROTO=ICMP TYPE=8 CODE=0 ID=34815 SEQ=1
Nov 20 22:13:41 ubuntu kernel: [186374.589210] vrf-test-localoutIN= OUT=vrftest SRC=9.9.9.9 DST=9.9.9.9 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=39426 PROTO=ICMP TYPE=0 CODE=0 ID=34815 SEQ=1
Nov 20 22:13:41 ubuntu kernel: [186374.589211] vrf-test-postroutingIN= OUT=vrftest SRC=9.9.9.9 DST=9.9.9.9 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=39426 PROTO=ICMP TYPE=0 CODE=0 ID=34815 SEQ=1
Nov 20 22:13:41 ubuntu kernel: [186374.589215] vrf-test-preroutingIN=vrftest OUT= MAC=ca:f9:f0:37:4c:6c:ca:f9:f0:37:4c:6c:08:00 SRC=9.9.9.9 DST=9.9.9.9 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=39426 PROTO=ICMP TYPE=0 CODE=0 ID=34815 SEQ=1
Nov 20 22:13:41 ubuntu kernel: [186374.589217] vrf-test-localinIN=vrftest OUT= MAC=ca:f9:f0:37:4c:6c:ca:f9:f0:37:4c:6c:08:00 SRC=9.9.9.9 DST=9.9.9.9 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=39426 PROTO=ICMP TYPE=0 CODE=0 ID=34815 SEQ=1
|
从log可以看出:
请求报文经过的hook点顺序如下:
序号 | hook点 | 输入接口 | 输出接口 |
---|
1 | OUTPUT | 无 | vrftest |
2 | POSTROUTING | 无 | vrftest |
3 | PREROUTING | vrftest | 无 |
4 | INPUT | vrftest | 无 |
应答报文经过的hook点顺序如下:
序号 | hook点 | 输入接口 | 输出接口 |
---|
1 | OUTPUT | 无 | vrftest |
2 | POSTROUTING | 无 | vrftest |
3 | PREROUTING | vrftest | 无 |
4 | INPUT | vrftest | 无 |
环回请求和应答是一样的。
总结
- linux内核支持VRF后,报文会两次进入PREROUTING节点,第一次是原始接口,第二次是原始接口依附的vrf主接口。
- linux内核支持VRF后,本机输出的报文,先以vrf接口作为输出接口经过OUTPUT和POSTROUTING节点,然后再以真实出去的接口经过OUPUT和POSTROUTING节点。
- 本机报文进行环回时,与没有VRF的环境是一样的。
推荐学习:《linux视频教程》
以上就是一文详解Linux netfilter与VRF及其总结的详细内容,更多文章请关注木庄网络博客!
返回前面的内容
相关阅读 >>
怎么查询导入镜像和导出镜像的详细信息
如何使用imagetype定义镜像信息的类型
Linux系统怎么学习
开通 ram 服务之后如何通过 api 使用实例 ram 角色
Linux中解压zip文件出现乱码的解决方法有哪些
Linux中ssh远程登录失败怎么办
如何在Linux上启用ip转发
实例分配了公网ip地址之后怎么更换公网ip地址
Linux如何实现禁止ping的实例代码分享
Linux服务器搭建svn环境方法详解
更多相关阅读请进入《Linux》频道 >>
转载请注明出处:木庄网络博客 » 一文详解Linux netfilter与VRF及其总结