解决Tailscale iptables规则导致CGNAT地址冲突问题

运营商在CGNAT地址空间(100.64.0.0/10)内分配私有IP地址给NAT网关后的客户,来防止与用户内部使用的私有IP地址发生冲突。Tailscale也使用CGNAT地址作为组网设备的IPv4地址。出于安全考虑,Tailscale在Linux上默认会建立一个iptables规则来丢弃所有来自100.64.0.0/10的数据包,防止攻击者假冒私有网络内的设备进行攻击(NVD - CVE-2019-14899,Tailscale issue #3104)。然而,运营商或者一些大型组织也可能使用CGNAT地址为客户提供内部服务,Tailscale添加的丢弃规则将使得运行Tailscale的设备无法访问这些资源。例如,阿里云为其弹性计算服务器(ECS)提供的APT软件包源和DNS服务器就使用100.100.0.0/16网段,ECS上启动Tailscale后就无法解析域名,也无法获取APT软件包。 问题复现 在100.64.0.0/24网段内准备两台Ubuntu 24.04设备: ubuntu-2 IP: 100.64.0.2 网段:100.64.0.0/24 ubuntu-3 IP: 100.64.0.3 网段:100.64.0.0/24 此时,两台机器互相可以ping通。 Tailscale未安装时ubuntu-2可以ping通ubuntu-3 在ubuntu-2上安装Tailscale(此时安装的版本为1.90.4)并连接到已有的Tailscale网络: curl -fsSL https://tailscale.com/install.sh | sh sudo tailscale up 此时,在ubuntu-2上无法再ping通ubuntu-3。使用sudo iptables -L命令查看iptables规则发现,Tailscale添加的规则丢弃了所有来自100.64.0.0/10的数据包。 Tailscale连接后ubuntu-2无法ping通ubuntu-3 Tailscale添加的iptables链ts-input丢弃了所有来自100.64.0.0/10的数据包 断开Tailscale连接之后,在ubuntu-2上又重新可以ping通ubuntu-3。 尝试:手动调整iptables规则 直接使用iptables命令修改规则看似能解决这个问题,但只能临时缓解,不能彻底根除。 运行以下命令在iptables的INPUT链顶部插入对所需网段(此处以100.64.0.0/24为例)的ACCEPT命令: sudo iptables -I INPUT 1 -s 100.64.0.0/24 -j ACCEPT 此时我们插入的ACCEPT规则会比Tailscale插入的DROP规则具有更高的优先级,ubuntu-2也能正常ping通ubuntu-3。但如果我们使用sudo tailscale down && sudo tailscale up命令断开并重新连接Tailscale网络,Tailscale就会将其自身iptables规则重新插入到列表顶端,我们新增的ACCEPT规则优先级低于Tailscale的DROP规则,从而ubuntu-2再次无法ping通ubuntu-3。 手动添加iptables规则后ubuntu-2能正常ping通ubuntu-3 Tailscale重新连接后iptables规则顺序改变,再次无法ping通ubuntu-3 Tailscale并不向外公开网络连接、断开的事件。当手动运行tailscale down时,tailscaled服务并不会停止,tailscale0网络接口也保持在UP状态,即使我们想要编写脚本来重新插入我们的iptables规则,也很难让脚本在需要的时机自动运行。 最后,运行以下命令删除刚才新增的iptables规则: sudo iptables -D INPUT -s 100.64.0.0/24 -j ACCEPT 尝试:使用Tailscale的netfilter-mode=off参数 Tailscale提供了netfilter-mode=off参数来禁止Tailscale自动创建iptables规则。这个参数能够彻底防止Tailscale创建规则丢弃我们想要的数据包,但也同时会带来其他问题。 使用sudo tailscale up --netfilter-mode=off命令连接tailscale网络后,可以注意到iptables中没有了有关Tailscale的规则,也可以正常ping通ubuntu-3了。...

2025年11月9日 · 桃又

解决WSL Ubuntu手动启用systemd后缺少/run/user/<uid>目录问题

WSL(Windows Subsystem for Linux)早期是不支持systemd的。后来WSL增加了systemd支持之后,之前安装过的发行版需要在发行版内/etc/wsl.conf文件中增加systemd=true设置才能启用systemd。我使用了很久的Ubuntu发行版启用systemd之后却遇到了一个问题:缺少/run/user/<uid>目录,导致部分软件运行失败。如果手动创建这个文件夹,在WSL重启之后这个文件夹就会自动消失,令人十分烦恼。而此时全新安装的Ubuntu 24.04 LTS、Ubuntu 22.04 LTS、Ubuntu 20.04 LTS这些WSL发行版,虽然默认启用了systemd,但也能正确创建/run/user/<uid>目录。说明这不是WSL本身的问题,而是发行版自身状态有问题。 ...

2025年4月8日 · 桃又

在基于Netplan和systemd-networkd的系统上开启systemd-resolved的mDNS功能

Ubuntu Server 24.04版本是一个默认启用systemd-resolved和system-networkd的发行版。通过配置可以启用systemd-resolved上的mDNS功能。但是Ubuntu上默认通过Netplan来管理systemd-networkd配置,给我们的配置工作增加了难度。 ...

2024年10月26日 · 桃又

使用cert-manager为Traefik IngressRoute自动签发Let’s Encrypt证书

cert-manager是一款云原生证书管理系统,能够根据Kubernetes原生Ingress对象的注释(annotation)自动为其签发合适的证书。Traefik的一些功能难以配合原生Ingress对象,而需要使用其定制的IngressRoute才能方便地使用,但我们仍然能够利用cert-manager为其自动签发证书。 本文将在自带Traefik Ingress控制器的k3s环境中,介绍如何利用cert-manager为Traefik IngressRoute对象签发Let’s Encrypt证书。 ...

2024年5月16日 · 桃又

广东某处广电宽带测评

本文对广东某处广电宽带(广东有线)的连接方式、点对点友好程度和网速进行了测试。 ...

2024年5月14日 · 桃又

上海某处联通宽带测评

宽带运营商一般对于家用宽带的宣传仅限于网速,客户很难了解连接方式、NAT类型、IPv6支持情况、网络延迟等技术信息。本文对上海某处联通家用宽带的这些技术信息进行了测试,以下为测试结果。 ...

2024年4月20日 · 桃又

QNAP单向同步RTRR与rsync对比

QNAP品牌NAS(Network attached storage,网络附加存储)上提供的HBS 3工具可用于在NAS之间之间同步文件。若在两台QNAP NAS之间同步文件,常用的有RTRR和rsync两种方式。其中RTRR是QNAP的专有协议,rsync则是Linux系统上一款快速、功能全面的文件复制工具。那这两种方式有什么具体区别,应当选择哪种方式来进行同步工作呢?本文将实测两种同步方式的设置选项和运行机制区别。 ...

2024年4月13日 · 桃又

C++浮点数转换为整数的溢出问题

C++语言提供了将浮点数转换为整数的功能。但是,如果要转换的浮点数超出了整数的表示范围,会得到怎样的结果呢?这种情况在标准中是未定义行为(隐式转换 – cppreference.com)。例如,在x64架构上运行以下测试代码: std::cout << static_cast<int32_t>(std::pow(2, 31)) << std::endl; ...

2024年1月28日 · 桃又

Windows系统Python多版本共存和便捷切换

在Windows系统上,无论是使用官方安装包还是Microsoft Store应用商店安装Python,在命令行中使用python命令都只会打开其中某一个特定版本的Python。若是同时安装了多个版本的Python并且想要启动其中的一个,则通常有些困难。若要调用某个特定版本Python的PIP包管理器来安装依赖包,则情况更为复杂。实际上,官方安装包版本和Microsoft Store应用商店版本均提供了用于区分不同Python版本的便捷方式。 ...

2023年10月31日 · 桃又

使用APT安装Intel oneAPI的固定版本

Intel oneAPI是Intel公司的高性能异构计算工具集,包含有Intel C++编译器、Intel Fortran编译器、Intel MKL数学库等组件。要在基于APT包管理器的操作系统(如Ubuntu)上安装Intel oneAPI,可以使用Intel提供的APT源进行安装。然而,使用官方文档中列出的操作步骤安装后,安装的软件会被APT自动更新并导致潜在的兼容性问题。使用带版本号的包名可以解决这一问题。 ...

2022年12月23日 · 桃又