You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

外网无法访问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端口的入站流量。

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:80Listen 内网IP:80);
  • 修改后重启Apache:sudo systemctl restart apache2

内容的提问来源于stack exchange,提问作者Pfaeff

火山引擎 最新活动