土豆不好吃

什么鬼啊,我的容器怎么无法访问外网了

大概几个星期前,在把YYeTs Bot迁移到香港时,发现在容器里竟然无法访问外部网络。

由于之前看到有报道称香港的某些ISP对某域名进行了污染,因此此时就立刻想到了,是不是aws的上游也对 api.telegram.org 进行了污染?

容器里没法curlapk update了一下,发现竟然无法update,难道是alpine挂了吗?Ubuntu也是,这俩一起炸?概率太低了吧。新加坡的那台机器也是同样的问题,但是日本就没问题。同样都在亚洲,大家有什么差别吗?难道是整个东南亚的海底光缆全炸了?可是没见到有人说东南亚的机房炸了啊,况且就算炸了,那也应该会找别的路由出去啊,就算丢包也不会直接炸光啊。

就算你是柯蒂斯·李梅,手里有着一百架B-2轰炸机,也不能炸的这么彻底啊。

试了一下,宿主机能够访问啊,那就是没问题的。一定是某些配置不对。重新安装了docker engine,结果也还一样,香港和新加坡的机器就是不好用,但是日本可用。


搜了一下,可能是没开ipv4.forward?但是我一般是开启这个的呀,而且我开了啊……

后来在网上翻到这样一篇文章,《Docker容器无法连接外部网络原因排查》,了解到bridge网络docker是通过iptables转发流量的。

此时,我突然意识到,我的这两台服务器似乎都设置了大量的本地端口转发,恰巧也覆盖了80和443这两个端口……把这个规则删掉,重启docker engine。好的,村通网了。

罪魁祸首的这条命令

iptables -t nat -A PREROUTING -p tcp --dport 23:1000 -j REDIRECT --to-ports 16698

事实证明,是我的想象力太丰富了。来一拳就好了。


文章版权归原作者所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权|
转载必须包含本声明,并以超链接形式注明原作者和本文原始地址:
https://dmesg.app/container-no-network.html
退出移动版