Open lzh2nix opened 1 year ago
最近在查询 macvlan 相关资料时发现了datahacker.blog 这个站点, 作者整理了很多netwok 相关的资料, 质量也是上乘. 还整理出了一个89页的pdf 来系统的讲解 linux 下的network, 之前遇到 network 相关的问题都是直接查 google 解决问题, 看到这个小册子的时候感觉是应该系统的学习一下这块儿知识了.
linux 下各种网络工具最终要解决的两个问题是:
其实在目前的 Netfilter 框架中我们依然可以看到 ipfwadm 的影子. IN, OUT, FORWARD chains 依然是 iptables 里面使用最多的chain.
1997 RPDB(Routing Policy DataBase) 诞生也就是我们现在还是一直使用的ip route, ip rule, 以及route ifconfig, netstat的基础.
2000 iptables 正式在 2.3 内核中引入. 在 ipchains 基础上引入了PREROUTING, POSTROUTING以及用户可以自定义chain.
2000 netfilter 在2.4 版本中引入了. 与其说这是一个功能不如说是一套框架, 有一下几个功能:
2014 3.13 内核中nftables 在内核中正式被引入, 最大的特点是可以直接和内核的netfilter进行交互.
说实话nftables 虽然很牛逼, 但是替换iptables 是在是太难了(遗留代码对其依赖实在是太多了)
A route informs your server where to find other network devices it wants to talk to, based on the destination network address.
route 信息告诉了服务器怎么路由消息(where), iptables 就是告诉服务器哪些消息可以处理(what).
linux 可以通过 ip route 和route 来管理路由, 不过route 已经处于 deprecated 状态, 实际使用中应尽量使用ip route.
一个packet 的处理流程:
具体的Routing 流程:
目前linux 都是基于策略的路由 Routing Policy DataBase(RPDB). 通过RPDB将routing 地址, route rules 和route table 给结合起来. 在rule 里定义了路由规则, 被match到之后执行具体的动作, 一个常规网络包的处理流:
一条ip rule 规则是由 match filter 和 action 两部分组成
下面是一个常见的ip rule(这里就用fom 和fwmark 规则)
0: from all lookup local
100: from all fwmark 0x10 lookup 131
200: from 223.82.64.253 lookup 131
32766: from all lookup main
32767: from all lookup default
ip Rule 处理流程:
IP Route 处理流:
系统几个特殊的table(Master Routing Table):
[root@localhost ~]# cat /etc/iproute2/rt_tables
# reserved values
255 local
254 main
253 default
0 unspec
Routing table的最佳实践:
ip route 命令级别解释:
[root@localhost ~]# ip route
default via 172.16.11.2 dev ens256 proto dhcp src 172.16.11.160 metric 100
从ens256 的 172.16.11.160 出去的包转发给172.16.11.2(网关)
172.16.11.0/24 dev ens256 proto kernel scope link src 172.16.11.160 metric 100
从ens256 的 172.16.11.160 出去然后转发给172.16.11.0/24的包 src ip 设置为172.16.11.160.
具体命令变化规则太多, 可以看man page: ip route: https://man7.org/linux/man-pages/man8/ip-route.8.html ip rule: https://man7.org/linux/man-pages/man8/ip-rule.8.html
content
缘起(2023.4.1) networking 要解决什么问题(2023.4.2) Linux network 简史(2023.4.2) Network Routes(2023.4.3) RPDB(2023.4.5)