Recent Posts
-
2019-09-22
Linux内核中的udp隧道框架
起源TCP虽然能保证传输的可靠性,但其繁琐的状态机以及复杂的拥塞控制机制让它难以作为隧道报文的外层封装.相对而言,UDP就没这个困扰了,丢包的事情交给应用层处理就行。因而,不少隧道协议都是将UDP作为外层报文的方案。自然而然,与网络发展联系紧密的Linux内核也开始支持这些隧道协议,较新的内核已经支持fou、l2tp、vxlan、tipc、geneve等UDP隧道协议。最开始,各个隧道协议都是独立实现的,但随着数量的增多,在patch之后,内核将这些UDP隧道公共的部分抽离出来,也就形成了...
-
2019-09-19
TCP-In-TCP
前天晚上在家中,当我搭起熟悉的ss梯子时, 发现不可用了T.T。登陆到控制台查看,发现国内的IP被Block了。问问身边朋友,也是一样的现象,听说是因为网络安全周?!看来只能寄希望于一周后能恢复吧….昨天瞎逛,看到一个开源项目:udp2raw-tunnel,他实现的是将一个IP报文伪装成TCP报文,目的是穿过网络中UDP防火墙.哈?!这难道是TCP-In-TCP? 这玩意儿不是不可用吗?很早以前就有人说过了:Why TCP Over TCP Is A Bad Idea为了将问题描述地更清楚...
-
2019-09-17
XFRM -- IPsec协议的内核实现框架
IPsec协议帮助IP层建立安全可信的数据包传输通道。当前已经有了如StrongSwan、OpenSwan等比较成熟的解决方案,而它们都使用了Linux内核中的XFRM框架进行报文接收发送。XFRM的正确读音是transform(转换), 这表示内核协议栈收到的IPsec报文需要经过转换才能还原为原始报文;同样地,要发送的原始报文也需要转换为IPsec报文才能发送出去。OverviewXFRM 实例IPsec中有两个重要概念:安全关联(Security Association)和安全策略(...
-
2019-09-14
IPsec与NAT Traversal(NAT-T)
背景IPsec在两个通信实体之间建立安全的数据传输通道, 但它却与网络中广泛存在的NAT设备(以及PAT)有天生的不兼容性(incompatible)。我们以一个TCP报文为例来看看在不同IPsec的不同模式(Transport和Tunnel)和协议(AH和ESP)下,这种不兼容是如何发生的。先来看Transport模式对AH协议,由于其Authenticate范围是整个IP报文,所以如果两个IPsec之间存在NAT设备,修改了报文IP Header中的地址,就会导致接收方的Authent...
-
2019-08-29
FIB nexthop Exception是什么
理论3.6版本内核移除了FIB查询前的路由缓存,取而代之的是下一跳缓存,这在路由缓存的前世今生 中已经说过了。本文要说的是在该版本中引入的另一个概念:FIB Nexthop Exception,用于记录下一跳的例外情形。它有什么用呢?我们知道,FIB表项来源于路由配置(用户手动或者路由进程计算),说到底,它们都来源于用户空间的设置。这些表项基本是稳定的。但内核实际发包时,还有两个情况需要考虑 收到过ICMP REDIRECT报文,表示之前发送的报文绕路了,之后的报文应该修改报文的下一跳。...