2025-12-12 20:06:39

最近有一个docker container在部署的时候好好的,跑了一阵子发现他好像连不出去外网。一开始怀疑是container内的逻辑问题,排查了一通发现并不是。因为网络请求使用的是域名,报错跟getaddrinfo相关,于是又怀疑是DNS问题。
于是进入docker container内进行Debug
docker exec -it <container-name-or-id> /bin/bash
ping 8.8.8.8 # timeout
curl http://example.com # failed
在contaienr中尝试ping与curl均失败,所以肯定是container网络不通的问题。
开始检查docker-compose yml文件,确认network是否存在:\
docker network inspect <network-name>
检查network也是存在的,删除重建,问题依然存在。有点麻烦。


本图使用Nano Banana Pro生成
可以看到container中的网络请求,会通过docker内的eth0通过veth转发到host machine的docker0 bridge network。接着在forward到host machine的eth0,最终把请求发出去。
所以现在container中发不了请求,但host machine网络通畅,有可能是ip forwarding没打开。
sysctl net.ipv4.ip_forward
// net.ipv4.ip_forward = 0
确认问题是Linux内核的ip forwarding被关了。手动打开ip forwarding
sudo sysctl -w net.ipv4.ip_forward=1
再尝试从container中发送请求,一切正常,problem sovled!
不少云服务厂商提供的主机都会自带一些安全功能,可能会主动关闭IP Forwarding,我们可以检查一下sysctl的配置:
/etc/sysctl.conf
/etc/sysctl.d/*.conf
我发现/etc/sysctl.conf中有net.ipv4.ip_forward = 0的配置。这样的话,只要机器重启,ip forwarding还是会被自动关闭。
所以我们还需要手动将这些配置文件修改,可以将对应行注释掉。
经常使用macOS的小伙伴们对sysctl这个工具一定不陌生,这是从BSD时代就有的东西,Linux的sysctl设计理念也是源自BSD Unix。macOS的XNU内核里就包含了BSD内核代码(Mach+BSD),所以在macOS上查看ip forwarding可以这样:
sysctl net.inet.ip.forwarding
# net.inet.ip.forwarding: 1
无论BSD还是Linux内核,这个sysctl工具都只是一个内核配置的读写工具。
那么Linux内核中真正执行ip forwarding的地方在哪里呢?让我们打开Linux源码仓库👉https://github.com/torvalds/linux
上面说过sysctl只是读写配置,其实它也是由多个部分组成,我们在terminal直接操作的sysctl命令多是由用户态工具提供的,标准Linux发行版都有。至于内核,则由各个子系统自行读取对应的配置。
具体到ip forwarding这个例子,我们需要看net子系统。最终的ip forwarding逻辑的代码在net/ipv4/ip_forward.c,其中的int ip_forward(struct sk_buff *skb)函数就是把包转发到下一跳的逻辑。里面进行了大量的检查,最终执行forward,但是这个函数本身并不检查sysctl配置,所以我们且按下不表。
真正检查配置并执行该方法的地方,位于net/ipv4/route.c文件中。在这个函数:
static enum skb_drop_reason
ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr,
dscp_t dscp, struct net_device *dev,
struct fib_result *res)
使用IN_DEV_FORWARD(in_dev)来判断是否开启了ip forwarding。如果没有开启,会走到goto no_route,如果开启,则走到goto make_route。
no_route处理就很简单,把返回值置为RTN_UNREACHABLE,告诉上层此路不通,对应我们在docker container中的现象就是无网络。
make_route会调用如下函数:
static struct rtable *__mkroute_output(const struct fib_result *res,
const struct flowi4 *fl4, int orig_oif,
struct net_device *dev_out,
unsigned int flags)
然后把包转发给下一跳,这个函数里使用一个struct rtable记录ip_forward这个函数指针,最后在net/ipv4/ip_input.c的ip_rcv_finish()函数中,使用dst_input(skb)真正调用到ip_forward()这个函数。
rtable是Linux内核中常见的一个设计,把数据和行为封装到一个struct里面,后续执行的流程不需要做if-else判断,只需要统一使用调度方法即可。
dst_input(skb);
dst_output(net, sk, skb);
在我们排查的这个case中,我们只关注ip_forward。但是在net子系统中,该设计还能扩展支持ip_local_deliver, ip6_input, xfrm_input等等功能。很有意思。
本来我查到docker container无网络,只要执行sudo sysctl -w net.ipv4.ip_forward=1就能临时解决这个问题了。但是研究了一下发现原来还有文件配置项,规避了系统重启让我的docker container再次无网络的问题。
顺便因为发现sysctl有点意思,就进一步研究Linux源码,发现它的设计与XNU有些相似又有很大不通。如今Linux内核已经是一个非常庞大的代码库,XNU其实也是的。rtable和sysctl的设计能很好地在多个子系统之间解耦,提供很高的可扩展性。当然,如果我们在一个足够简单的项目里是没必要使用这种级别的设计的,反而会引入更高的理解成本,造成过度设计。
但了解内核的代码总能带来新的惊喜,蛮有趣的。以前我阅读XNU源码的时候,只能通用我人工手动一点点搜索代码,判断调用入口与调用链来理解。现在有强大的LLM,这个过程快了很多。AI时代,阅读内核代码将变得无比简单。
2025-12-08 12:54:13

哈喽大家好,又是好久不见的一期。事实上我台两位主播最近都在经历能量的低谷,或者说时间上的不充裕。所幸在我们复盘我台的节目策划的过程中,两位主播又重新获得了能量,开始了新一期节目的录制。
本期节目具有比较大的偶然性,我们本来规划要聊最近玩的几个有趣的硬件,但没想到麦克风一打开,画风就飘到了十里开外。我们很默契地都没有把话题拉回来,就任由它飞吧,有多远飞多远。
事实上在我们一起录制播客的初期,我们就是这样随性聊天的,只是后来成了一些系列节目之后,反而受到了制约。我台的豪华制作阵容一直就只有我们两个,再加上帮我们做剪辑的后期小姐姐静静算2.5人,这样的规模是没办法和专业团队比较的。我们没有节目策划,没有节目审校,也没有规划。我们平时都有自己要忙的事情,更没空进行集中的运营。
所以做播客对我们来说意味着什么?我们为什么喜欢做播客?我们为什么要一直录播客?过去几年,我们关注的话题从苹果,到读书,到邀请世界各地的科技从业者,到独立开发者,到AI,既跟我们个人的趣味,也跟世界的趋势息息相关。做播客,跟人聊天本身就是件挺有意思的事情。
虽然我(Justin)不太认为听播客能严肃地学到什么东西,但是听不同的人讲述跟我完全不同的视角,这本身即使一个颇具启发的过程。能够从中获得一些灵感,从而开启一场深入的思考,这样就很不错。
除了我们两位主播的能量低谷与时间贫困,我认为还有我们随着对既定议题的了解程度逐渐深入,好奇心在逐渐降低。现在我明白,不一定是对一件事情一无所知才能好奇。当我们逐渐了解一个行业,一个社会议题,一个群体之后,我们仍然能好奇每个人的不同点。这也许是我们最近讨论下来能重获好奇的一点。但具体是否符合预期,也得先试试。行动起来,我们将会发现,这个世界能让人产生好奇的还有无数个方向无数种人生。
Stay hungry. Stay foolish.

fyfyFM进群推荐使用苹果Podcast, 小宇宙等播客客户端搜索“枫言枫语”来订阅收听本节目。
2025-11-09 22:35:25

甚是想念之二😂
这期节目录制的时候NEO刚发布,结果现在又来个小鹏机器人,最近大家都开始卷机器人领域了,不错不错。
p.s. 节目录制时NEO机器人刚刚发布,次日MKBHD频道的视频介绍,该机器人演示视频为真人动作捕捉远程操作,并非实机演示,且交货日期是明年的某个未知时间。与该机器人发布视频令人兴奋之对比,这个真相未免有点残酷。
00:00:28 人形家务机器人 1X NEO 预售,约15万元
00:02:02 机器人续航4小时,外形可能引发“恐怖谷效应”
00:05:33 机器人联网与隐私担忧,离线模型的重要性
00:10:52 机器人将替代重复性劳动,人类专注情感服务
00:14:50 OpenAI 进军音乐模型,挑战 Suno AI
00:24:51 OpenAI 推出 AI 浏览器 Atlas
00:32:28 Firefox 测试免费内置 VPN,主打隐私安全
00:34:06 Chrome 将加入原生垂直标签页功能
00:35:42 微软与 OpenAI 重新达成协议,微软持股27%
00:36:59 GitHub 推出 AgentHQ,实现 AI 团队式协作写代码
00:40:25 DeepSeek 在加密交易与模型性能上表现亮眼
00:43:39 DeepSeek 发布开源 OCR 模型,性能超越传统方案
00:45:15 Claude 推出 Haiku 4.5,性能接近旗舰但成本更低
00:46:46 ChatGPT 开放成人内容限制,反击 Grok
00:49:13 AI 红绿灯系统以提升交通效率
00:50:55 俄亥俄州禁止人类与AI结婚,反映伦理担忧
00:51:58 Sora 开放安卓预注册,好莱坞因版权风险开始反制
01:02:36 ChatGPT 推出即时结账功能,可直接完成支付
01:03:58 Claude 订阅体系引争议
01:09:11 Google 量子计算取得重要进展,误差率更低
01:10:03 Intel 发布 1.8nm 芯片,与 Apple M5 竞争
01:11:53 影视飓风发布相机应用,展示团队商业化能力
01:27:57 太空反射镜计划提供夜间阳光
fyfyFM进群推荐使用苹果Podcast, 小宇宙等播客客户端搜索“枫言枫语”来订阅收听本节目。
2025-11-03 17:06:08

好久不见,甚是想念!
国庆放了个长假,结果我台一放就一个月了😂
感谢小伙伴们的关注,催更已经收到,我们回来啦!
本期快乐星球,一下聊得有点嗨,分为两集播出,先让我们走进上集:苹果新闻。
自力也发布了新App: 2Camera,在iPhone上支持两个摄像头同时拍摄,双份故事, 双倍精彩,一键合成录制画中画。欢迎各位小伙伴们下载试用👏。
fyfyFM进群推荐使用苹果Podcast, 小宇宙等播客客户端搜索“枫言枫语”来订阅收听本节目。
2025-10-13 13:46:16
Some notes from 10/07-10/11





Posted on 2025-10-07







Posted on 2025-10-09
假期去了一趟新疆,虽然知道长假国内会有很多人出行,但最近确无精力自行规划出国旅行,于是选择让旅行社安排一切。于是这样旅行几乎全程不需要动脑,非常省心。
国内有不少壮丽的风光很值得去看看,当然国庆假期并不是一个合适的时间,季节虽然对了,但人流之汹涌还是超出想象。再加上恰逢几天都是坏天气,大雪封路,各种堵车,路上免不了遇到些无奈时间。
新疆很大,我们大部分时间在车上,又因为带着小孩,所以真正能放空的时间不算多,有些走马观花之感。
其实在十多年前我们在世界各地穷游时也免不了走马观花,但那时候很多东西没见过,会在第一次大雪中开心地蹦跶,会在穿越数千年的古迹间驻足沉思。现今再看眼前风景,虽十分壮丽,却少了年轻时容易激动的心情。
可能更理想的旅行方式是不赶时间,不打卡,不在人流量最大的时候挤在景区入口等着上车。想实现这样的旅行方式,对打工族来说并不容易。
我想起孙东纯写的《迟到的间隔年》,本是作者在论坛上连载自己的Gap Year旅行经历,后来出版社邀请出书,成书已是2009年的事情了。
时隔十六年,我仍未开启我的间隔年,不知将迟到至何时呢。


Posted on 2025-10-11
2025-09-25 17:50:55

迎中秋,庆国庆,各位听众姥爷们假期好🎉
最近OpenAI的Codex在写代码能力上追赶竞争对手Anthropic的Claude Code,还推出GPT-5-Codex专用模型,双方差距正在缩小。
Google推出Nano Banan(Gemini 2.5 Flash Image)文生图模型,因人像生成稳定,效果拔群。
阿里的Qwen3-Mac-Preview发布,成为国内首个超1万亿参数的大语言模型。
感觉今年国内的LLMs追赶速度很快,我们节目里聊聊。
fyfyFM进群推荐使用苹果Podcast, 小宇宙等播客客户端搜索“枫言枫语”来订阅收听本节目。