防火墙放行与 UPnP 端口映射:让直连成为可能
需要放行的端口
本地防火墙(Windows Defender、iptables 等)要放行入站与出站:
- 22000/TCP——TCP 同步协议;
- 22000/UDP——QUIC 同步协议;
- 21027/UDP——本地发现广播/组播。
三者的分工见[端口清单(01-ports.md)。改过同步监听地址的,按实际端口放行。
Linux 防火墙有现成预设
装了官方包/发行版包的 Linux 用户不用手写规则:
# ufw(Debian/Ubuntu 系)
sudo ufw allow syncthing
sudo ufw status verbose # 验证
# firewalld(RHEL/Fedora 系,0.5.0 起内置支持)
sudo firewall-cmd --zone=public --add-service=syncthing --permanent
sudo firewall-cmd --reload
另有 syncthing-gui 服务名用于放行管理界面端口——官方提醒典型安装不需要放行它。
Windows 上重点检查首次运行时的放行弹窗是否被点掉;被拒绝的规则在网络设置里重新允许即可。
UPnP:让路由器自己开端口
路由器支持 UPnP 时,最省事的做法是保持两端 UPnP 开启(默认开启),程序会自己完成端口映射。成功时控制台输出:
Created UPnP port mapping for external port XXXXX on UPnP device YYYYY.
讲究安全的环境常禁用 UPnP,那就走手动:在路由器上把外部 22000/TCP 与 22000/UDP 转发到内网设备的 22000。外部端口与内部端口保持一致最省心。
直连不成的兜底顺序
官方文档的逻辑顺序:
- 端口映射(UPnP 或手动)建立直连;
- 建不了直连时,中继兜底让设备至少能同步(慢),见[中继(02-relay.md);
- 静态 IP 的设备可以完全绕过发现与映射的麻烦,直接在设备地址里写死对端地址(见[发现机制(03-discovery.md))。
还要记得:连接是双向的——只要集群里有一台设备端口可达,其他设备就能主动连上它,不必每台都做映射。