外网无法访问Ubuntu 16.04搭建的SVN服务器问题求助
解决SVN外网访问失败的排查指南
看起来你已经搞定了内网SVN的搭建,现在卡在公网访问这一步,结合你提到的路由器只有IPv6设置的情况,咱们从几个关键方向逐一排查:
1. 优先确认公网IP类型(IPv4 vs IPv6)
这大概率是核心问题:
- 很多家庭宽带现在默认只分配IPv6地址,或者处于ISP的NAT大内网中(没有真正的公网IPv4)。你可以在服务器上执行
curl ifconfig.me,把得到的IP和路由器管理页显示的"外网IP"对比:- 如果两者不一致,说明你没有公网IPv4,用IPv4地址自然访问不了;
- 如果路由器确实只有IPv6设置,那你需要用IPv6地址访问SVN,格式是
http://[你的服务器IPv6地址]/svn/myrepo(注意IPv6地址必须加方括号),同时要确保:- 服务器系统开启了IPv6支持(Ubuntu16.04默认支持,但可以用
ip addr命令查看是否有IPv6地址); - 路由器的IPv6防火墙允许80端口的入站流量。
- 服务器系统开启了IPv6支持(Ubuntu16.04默认支持,但可以用
2. 检查Ubuntu服务器的防火墙规则
Ubuntu16.04默认启用ufw防火墙,可能没开放80端口的外部访问:
- 登录服务器,执行
sudo ufw status,查看输出中是否有80/tcp ALLOW Anywhere; - 如果没有,执行
sudo ufw allow 80/tcp开放端口,再用sudo ufw reload重启防火墙生效。
3. 验证路由器端口转发的正确性
端口转发设置容易踩坑:
- 确认转发的目标是服务器的内网IPv4地址(比如192.168.1.100),而不是MAC地址(虽然部分路由器支持MAC绑定,但转发规则通常基于IP,绑定MAC只是辅助);
- 检查转发协议是否为TCP(SVN over HTTP依赖TCP协议,不要选错UDP);
- 有些路由器需要重启才能让转发规则生效,不妨重启路由器试试。
4. 测试80端口是否真的对外开放
可以在外部网络的设备上执行telnet 你的外网IP 80,如果提示"无法连接",说明:
- 要么端口转发没生效;
- 要么ISP屏蔽了家庭用户的80端口(很多ISP会这么做,防止搭建公共服务),这种情况可以考虑把SVN的HTTP端口改成非80端口(比如8080),然后同步修改路由器转发规则和访问地址。
5. 检查HTTP服务器的监听范围
因为你是通过HTTP访问SVN,肯定用了Apache或其他HTTP服务,要确保它监听所有网卡的IP:
- 打开Apache的端口配置文件
/etc/apache2/ports.conf,确认存在Listen 80(而不是Listen 127.0.0.1:80或Listen 内网IP:80); - 修改后重启Apache:
sudo systemctl restart apache2。
内容的提问来源于stack exchange,提问作者Pfaeff




