自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Netfilter,iptables/OpenVPN/TCP guard:-(

我不会编程,但也不是一点都不会,我稍微会一些 :-)

  • 博客(11)
  • 资源 (4)
  • 论坛 (5)
  • 收藏
  • 关注

原创 漫谈TCP-AIMD/BBR的公平性以及buffer bloat

周三的时候,我发了一则朋友圈:aimd是公平的这个事实很容易从数学上证明,但是朴素的aimd会带来全局同步。解决reno家族全局同步的策略就是概率性随机丢弃,避免所有流同时md,然而bbr却没法从数学上证明这种策略是公平的,至少我是证明不了。。。周六早上3,4点钟自然醒,写篇意识流。了解TCP Reno/CUBIC的都应该知道,基于AIMD的Reno家族的窗口/时间曲线是一个锯齿状。锯齿看似是固有的,不可消除的,因为包括CUBIC在内的Reno家族CC(congestion control)

2021-01-30 08:28:39 8363 7

原创 简单基于tun实现的用户态NAT64

嗯,但还是想实现一个完整的用户态NAT64,今天上班,所以没多少时间,下班到家正好家人还没睡,在看殷墟考古(参与殷墟挖掘的尹焕章是我老婆的外婆的爸爸…鲜卑人的后裔…我老婆也是继承祖业,然而也仅仅是爱好,整天研究盗墓之类的把戏…),我也就可以再折腾一会儿了。写点感悟吧。昨天下午实现了一个NAT64简版,只是一个ICMP单流的NAT64转换,验证一下可信性而已。代码如下:https://github.com/marywangran/simpletun/blob/main/tunnat64.c效果写在RE

2021-01-24 22:00:04 3030 3

原创 像玩乐高一样玩simpletun

netcat小巧而灵活,能应付各种你需要的网络测试。但要明白netcat所能应对的网络场景基本都和端到端有关,比如和TCP,UDP有关。网络还有另一面,即链路本身。如果你想模拟一个防火墙,模拟一个NAT怎么办?用netcat能做到吗?这个时候你可能就必须自己写内核模块了吧。Netfilter?eBPF?NFV?这些都太复杂了!可以在用户态完成的时候就尽量在用户态搞,简单稳定最重要。我推荐simpletun。simpletun并不是某个著名的开源软件,但是在网上一找可以找一大片,随便找一个杂耍即可

2021-01-23 08:51:03 8667 10

原创 长肥管道(LFT)中TCP的艰难处境与打法

一年多没有深夜惊起而作文了,又逢雨夜,总结一些思路。带宽一定的情况下,网络的吞吐理论上不受时延的影响,虽然管道长了一点,但截面积是一定的。然而当你用TCP去验证这一结论时,往往得不到你想要的结果:一个长肥管道很难被单条TCP连接填满(一条TCP流很难在长肥管道中达到额定带宽)!我们做以下拓扑:首先我测算裸带宽作为基准。测试接收端为172.16.0.2,执行iperf -s,测试发送端执行:iperf -c 172.16.0.2 -i 1 -P 1 -t 2结果如下:------

2021-01-23 08:19:15 4341 14

原创 谁动了你的五元组-nf_conntrack与NAT的性能

在互联网上一个五元组标识一个应用程序到远端的另一个应用程序的连接。要保证端到端的可达性,显然在全局范围内,五元组必须是唯一的。保证五元组的全局唯一性看起来是个重体力劳动,以IPv4网络为例,仅仅考虑TCP和UDP,一个五元组空间包括两个32位IPv4地址,两个16位端口以及一个协议,总共232×2+16×2+12^{32\times 2+16\times 2+1}232×2+16×2+1种组合。穷尽这么大一个空间来寻找一个没有被使用的元组绝对是重体力劳动。然而在分布式的互联网环境,五元组的全局唯一性其实

2021-01-16 10:50:20 3214 1

原创 网络Midbox处理TCP的方式对TCP吞吐的影响

昨天下班的路上,我发了一则朋友圈:今天抓到一条大鱼,隧道的TCP载荷吞吐提升一倍多,哈哈,周末愉快!很多隧道都用同一个线程处理同一个tcp流,这显然不对,应该用不同的线程分别处理一个流的两个方向。但很多用户态隧道都是同一个线程处理同一条tcp连接的,这是问题。这个问题在很多人看来真的很low,依然是那种不过如此的问题,因为怕被笑话,我故意把事情说的很low,但这只是一种措辞处理的技巧,本来这事儿就这么过去了。但深入思考是我的习惯,我发现这竟然是一个普遍的问题,就准备记录下来。这不是一个和性

2021-01-16 09:14:48 2565

原创 谁动了你的五元组-Linux Netfilter NAT之nf_nat_alloc_null_binding

Linux的Netfilter NAT实现中,为什么会有一个nf_nat_alloc_null_binding(在低版本内核比如2.6,它叫alloc_null_binding)调用?该函数是在一条流没有命中任何NAT规则的时候调用了,其内部实现和对待命中了NAT规则的流的方式几乎一样,唯一的约束是,它只能修改一条流的源端口。问题是,既然没有命中任何规则,为什么要修改流的源端口呢?我早就想好好解释一下这个问题了,但我一直觉得有人已经解释过了,所以就没有写任何东西。周二下午家里有事正好休假,等待期

2021-01-16 07:08:16 2678

原创 手艺人舍bpftrace而取systemtap的代价和思考

上个礼拜我就想喷eBPF了,由于周末时间实在太紧,就准备拖延一周,但还是立了个flag,先发了个朋友圈:ebpf就像牛皮藓一样,已经遍布在linux内核的各个角落,每个调用点都看上去很随意,毫无规划,让人觉得好像自己觉得哪里需要这么一个调用点并不很难…但实际上如果你真的去尝试在某处加一个ebpf调用点时,就会觉得这件事和清除牛皮藓的过程非常类似,修改散落在各个目录的多个文件,还得重新编译,大概率失败,还要重新做一次,很难一次做干净,当你好不容易成功了,会有一种“不过如此”的嗟叹…我曾将ebpf比

2021-01-09 08:25:47 11188 8

原创 Linux Netfilter/NAT的两个典型问题

上周有一天下班回家路上,在一个三流技术群被一群网络新手和大佬一起鄙视是什么感觉?只因为我在讨论Netfilter而没有说eBPF,XDP,DPDK?嗯,我必须好好说道说道。十年前以及更久,那是Netfilter的黄金时期,几乎任何网络相关的功能,均可以在Netfilter上实现,当时懂Netfilter的人绝对是Linux网络领域的大佬,但是随着进入了移动互联网时代,互联网巨头们在大流量大并发的大背景驱使下,Linux内核协议栈已经显得力不从心,于是各种优化手段蜂拥而至,几乎革了内核协议栈的命。人们将协

2021-01-01 11:27:00 3576 1

原创 第一次使用Linux内核的Tracepoint的体验

我并不觉得丢人,一点也不。我是说我工作这么多年做和Linux内核相关的事,竟然在上上周才第一次使用tracepoint。这并不奇怪,我不会的东西还多着呢,比方说,我一直强调的,我不会编程,我也不会用git。言归正传,如果这么多年我都没用过tracepoint,那么作为替代,我用什么呢?如果我调试内核或者调试内核模块,最最最常用的方法就是在代码里加一条printk(如果是用户态程序,我就加一条printf。),我来告诉你理由:printk/printf 不需要安装任何别的依赖包。printk/p

2021-01-01 10:36:55 3748

原创 IPv6 socket侦听in6addr_any的问题

当我们 netstat -lnt 查看本机侦听端口的时候,经常会看到类似下面的展示:tcp6 0 0 :::22 :::* LISTEN 658/sshd: /usr/sbin显然,sshd创建了一个IPv6 socket,在in6addr_any地址上侦听22号端口。此时,我用一个该机器的IPv4地址去连接22号端口,通还是不通呢?为了避开无关的讨论,我假设net.ipv6.bindv6onl

2021-01-01 08:27:10 2866 1

关于linux内核以及其他个人体会的文集

本文集是我用将近两年的时间写成的,大多数文章是关于linux内核的,另外还有一些我自己对计算机的理解,还有一些历史,音乐方面的东西。适合于对linux内核思想感兴趣的阅读,文章偏重于对于思想的理解。

2009-09-07

一个iptables的stateless NAT模块实现

如果你在寻找Linux上配置诸如Cisco设备上的static双向NAT的方法,这个或许就是你想要的; what?你觉得它完不成PAT?是的,它不行。但是想做PAT为何不使用现有的iptables实现呢?它可以自动为你解决元组唯一性问题。不要从概念上分析,事实上,static双向NAT是完全对称的,一对一的 ,也只有在BOX两边的网络在拓扑级别是完全对等的情形下,这种NAT或许才是有用的,Cisco设备经常处在这样的位置,比如一个很大的stub节点的出口位置,比如两个domain的中间位置... 我将名字取为STATIC-2-WAY-NAT,比较长也比较怪,完全不符合UNIX的小写短名传统,我的想法是:这样可以少写很多的帮助信息,因为名字就是自解释的。

2014-12-27

模块化的nf-HiPAC

原版的nf-hipac需要为内核打patch,且只支持较低版本的内核,构建起来相对比较麻烦。 模块化后的nf-hipac可以直接作为内核可加载模块编译,且适配了高版本的Linux内核。为了移植工作简化,去掉了和iptables模块的联动支持!

2014-11-21

配置文件还有一些other

代码和配置iptables配置文件,还有一些别的东西

2010-04-16

dog250的留言板

发表于 2020-01-02 最后回复 2020-03-21

我的blog为何被屏蔽了,用户名为:dog250

发表于 2009-02-06 最后回复 2017-04-05

《java编程思想》的内容哪里体现了“思想”

发表于 2014-04-01 最后回复 2015-08-26

我的blog被删了,共享文章

发表于 2009-02-07 最后回复 2010-05-14

请删除我的一个资源 【解决并回复】

发表于 2010-04-18 最后回复 2010-05-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除