随笔分类 - 邻居nd netfilter
摘要:内核首先注册tftp help 将tftp_help 以及熟知的端口号69 注册到nf_ct_helper_hash链表中 static int __init nf_conntrack_tftp_init(void) { for (i = 0; i < ports_c; i++) { tftp[i]
阅读全文
摘要:NF_INET_PRE_ROUTING 做DNAT (做了DNAT后在做路由决定是local_in还是forwarding)数据包进入路由表之前 NF_INET_POST_ROUTING 做SNAT (离开协议栈时,做源ip替换)发送到网卡接口之前 NF_INET_LOCAL_OUT:本机发包时,做
阅读全文
摘要:目前内核NAT 是基于nf_conntrack连接跟踪实现。 首先看下conntrack的相关知识! /* struct sk_buff { struct nf_conntrack *nfct;//指向struct nf_conn实例 .............. }; */ //最主要的就是tup
阅读全文
摘要:/* rt_flags是一组标志位,按目的入口查询的执行顺序:如果路由使用本地环回接口,则rt_flags上加标志RTCF_LOCAL, 如果路由结果类 型是广播,则加标志RTCF_BROADCAST和RTCF_LOCAL,如果结果是组播,则加标志RTCF_MULTICAST和 RTCF_LOCAL
阅读全文
摘要:路由查找 与IPv4不同,IPv6的出口路由和入口路由都使用函数ip6_pol_route实现,区别在于传入的接口索引参数不同 INDIRECT_CALLABLE_SCOPE struct rt6_info *ip6_pol_route_input(struct net *net, struct f
阅读全文
摘要:路由表查找函数首先调用fib6_node_lookup查找路由节点,由指定路由表的根节点开始,根据数据流的目的和源地址进行。 static struct fib6_node *fib6_lookup_1(struct fib6_node *root, struct lookup_args *args
阅读全文
摘要:目前在解决ipv6 路由bug的时候发现,内核ipv6 和ipv4 路由设计区别很大! IPv6路由项添加 ip route add 3ffe::/64 via 3001::1 对应的核心函数为: fib6_add_1 :负责在路由树中找到合适的插入节点,或者创建新的用于插入操作的节点(根据allo
阅读全文
摘要:转载自: 理论 3.6版本内核移除了FIB查询前的路由缓存,取而代之的是下一跳缓存,这在路由缓存的前世今生 中已经说过了。本文要说的是在该版本中引入的另一个概念:FIB Nexthop Exception,用于记录下一跳的例外情形。 它有什么用呢? 内核通过查询转发信息表(fib_lookup),得
阅读全文
摘要:看下以前的文章首先说明一下 Routing与 Neighboring subsystem的关联 1、在路由过程中,需要寻找或创建 struct dst_entry (另一种形式是 struct rtable)。 dst_entry 通过neighbour 域与 struct neighbour 关联
阅读全文
摘要:fib_table_lookup 可以参考:https://blog.csdn.net/shichaog/article/details/44658205 1405 int fib_table_lookup(struct fib_table *tb, const struct flowi4 *flp
阅读全文
摘要:3.6版本以前的路由缓存 缓存无处不在。现代计算机系统中,Cache是CPU与内存间存在一种容量较小但速度很高的存储器,用来存放CPU刚使用过或最近使用的数据。路由缓存就是基于这种思想的软件实现。内核查询FIB前,固定先查询cache中的记录,如果cache命中(hit),那就直接用就好了,不必查询
阅读全文
摘要:/proc/net/stat/rt_cache /proc/net/rt_acct /proc/net/fib_triestat /proc/net/fib_trie ip route get xxxx(ip 地址) ip route list table (local main xxx) Scop
阅读全文
摘要:见之前的文章fib数据结构 路由fib创建 当通过netlink,操作类型为RTM_NEWROUTE时,调用inet_rtm_newroute函数添加路由。 功能:a)、将用户空间配置内容传过来 rtm_to_fib_config(保存路由表项的 ip 类型 tos 出接口 网关 metric 目的
阅读全文
摘要:sock结构体中有两个成员缓存路由:sk_rx_dst缓存入口路由,sk_dst_cache缓存出口路由 skb结构体中的_skb_refdst在特定时刻仅缓存一种路由,防止反复查找 skb_dst_set需要在调用前增加引用计数(dst_clone);而skb_dst_set_noref不需要,其
阅读全文
摘要:规则的添加 在规则初始化时,会注册添加函数fib_nl_newrule rtnl_register(PF_UNSPEC, RTM_NEWRULE, fib_nl_newrule, NULL); 接下来,分析创建规则fib_nl_newrule函数功能: (1)根据应用层传递的协议类型,找到相应的fi
阅读全文
摘要:全局散列表net->ipv4.fib_table_hash中,存放所有的路由表fib_table; 结构体fib_alias 相同网段的每一条路由表项有各自的fib_alias结构;多个fib_alias可以共享一个fib_info结构; struct fib_alias { struct hlis
阅读全文
摘要:ifconfig调用流程 ioctl(4, SIOCSIFADDR, {ifr_name="eth6", ifr_addr={AF_INET, inet_addr("20.20.20.20")}}) = 0 ioctl(4, SIOCGIFFLAGS, {ifr_name="eth6", ifr_f
阅读全文
摘要:DPVS 参考LVS设计,其核心在LVS的netfilter框架;笔者曾经做过类似的FULLNAT 满足portal 三层认证 LVS的HOOK点函数在内核中IPVS的源码在net/netfilter/ipvs目录下,LVS是以netfilter框架为基础,先看一下LVS在哪些HOOK点挂载了自己的
阅读全文
摘要:This post also provides an English version. 摘要 1 引言 1.1 概念 1.2 原理 1.3 设计:Netfilter 1.4 设计:进一步思考 1.5 应用 1.5.1 网络地址转换(NAT) 四层负载均衡(L4LB) 1.5.2 有状态防火墙 Ope
阅读全文
摘要:/* 需要对conntrack进行功能扩展的协议,会初始化一个struct nf_conntrack_helper 实例,把该实例注册到Netfilter中管理的全局哈希表中。 查找helper使用的hash 算法 static unsigned int helper_hash(const stru
阅读全文