游客发表

svn外网怎么连接

发帖时间:2026-10-17 04:55:01

公司内网的外网连SVN服务器,你在家就是外网连连不上。这事儿我遇到过不下十次,外网连每次都是外网连不同原因。最离谱的外网连一回,折腾两小时,外网连最后发现是外网连家里路由器把3690端口给封了。

SVN默认走3690端口,外网连协议是外网连svn://。这个端口在很多公司防火墙里是外网连默认放行的,因为内网用嘛。外网连但你要从外网连,外网连情况就变了——数据包得穿过至少两层NAT,外网连一层是外网连公司的,一层是外网连你家的。

先搞清楚你的SVN是怎么部署的

打开TortoiseSVN,右键你的工作副本,选“版本库浏览器”,看地址栏。如果是svn://192.168.x.x/repo这种,说明走的是svnserve,默认端口3690。如果是http://svn.company.com/repo,那走的是Apache的mod_dav_svn,端口通常是80或443。

两种部署方式,外网连接的做法完全不同。我见过有人拿着svn://的地址去问为什么HTTP代理连不上,这属于方向错了。

svnserve方案:端口映射是必经之路

假设你公司路由器有公网IP,或者至少能做端口映射。在路由器管理界面里,把外网的3690端口映射到内网SVN服务器的3690。听起来简单,但有几个坑。

第一,很多企业路由器不让你自己改映射,得找网管。第二,有些ISP封了3690端口,尤其是家宽动态IP那种。第三,如果你公司是拨号光纤,公网IP每隔几天变一次,映射就失效了。

我自己的做法是:把svnserve的端口改成443或者80。对,就是HTTP的端口。很多防火墙对这两个端口是放行的,因为不让过的话整个网络就瘫了。改端口在svnserve.conf里加一行port = 443,重启服务就行。但这招有个前提——443端口没被其他服务占用。

改完端口后,客户端地址要写成svn://你的公网IP:443/repo。注意那个冒号和端口号,漏了就连不上。

HTTP方案:反向代理更省心

如果公司SVN本来就是Apache或Nginx挂的,那外网访问反而简单。你只需要在防火墙上把443端口映射到内网Web服务器,然后配一个反向代理。

Nginx的配置大概长这样:

location /svn {  proxy_pass http://192.168.1.100/svn; proxy_set_header Host $host; }

这样外网访问https://你的域名/svn就能连上。好处是走HTTPS,数据加密,而且443端口基本不会被封。坏处是得有个域名,或者至少能记住公网IP。

我见过一个案例:某公司用阿里云ECS做跳板,内网SVN通过VPN连到ECS,外网用户再连ECS的443端口。这套方案稳定,但成本高,小团队没必要。

动态IP的麻烦事

家里或小公司用动态公网IP,今天连上了,明天IP变了,SVN客户端就报“无法连接”。解决办法是用DDNS,比如花生壳、no-ip。在路由器里配好DDNS,客户端地址写域名而不是IP。

但DDNS有个延迟,IP变了之后可能要几分钟才更新。急性子的人会以为配置错了,其实等一会儿就好。

实在不行就上VPN

如果公司防火墙策略很严,什么端口都不让过,那就只能VPN。OpenVPN或者WireGuard,连上VPN后你就相当于在内网,直接写内网IP就行。缺点是每次连SVN前得先连VPN,多一步操作。

我自己的选择是:小团队用svnserve改443端口加DDNS,大公司用Apache反向代理加HTTPS。VPN是最后手段,能不用就不用,因为多一层隧道,速度会掉。

最后提醒一句:外网暴露SVN服务,密码别用弱口令。我扫过一些公网IP的3690端口,匿名可读的版本库一抓一大把。改端口、加认证、上HTTPS,这三件事至少做一件。

    热门排行

    友情链接