外网访问局域网Jenkins

刚在家里的机器搭建了Jenkins ,想要在外面使用的时候需要借助远程桌面 (我使用TeamViewer) 软件登录到机器,才能进行操作。虽然麻烦点但也还是能够进行操作。

直到有一次,需要用到Jenkins的时候,使用 TeamViewer 进行登录家里主机的时候竟然卡主了,没法登录进入远程主机。

PS TeamViewer 免费也还算稳定,但是也总有出bug的时候。

我需要更加稳定的服务…


之前听朋友说自己搭建了一个 DDNS 通过域名访问局域网电脑, 可以进行 ssh 登录。 很酷方便,动态DNS解析加上端口转发就可以实现啦。

那我就可以考虑直接访问家里机器的 Jenkins 地址了。思路很简单 本文重点【要考】

  1. 找个域名服务商搞个动态域名解析服务,解析到 Jenkins 机器IP
  2. 在路由器将 Jenkins 端口进行转发

访问域名+端口就可以访问 Jenkins了!

没想到具体实现起来真的是,探索新大陆一样… 遇到新奇的事一件加一件,记录下。

DDNS服务商

我找几个服务,最后确认了这几个:

  • namecheap (这个是朋友推荐的)
  • no-ip
  • dynu

以上3个都可以提供免费的DDNS服务。

no-ip

我现在成功在使用的是 no-ip ,解析很快, 使用no-ip提供的三级域名 xxx.ddns.net 进行解析。缺点是需要一个月时间激活一次, 不能绑定自己的域名。

服务不需要科学上网也可以正常更新解析的ip。

namecheap

貌似只有自定义域名( not sure ),在域名提供商设置自定义DNS后,等了两天,始终没法解析成功。

dynu

可以使用自定义域名,页面还有中文支持。但是第一次更新ip成功之后,很快再次更新时就失败了,总提示超时。 原因: dynu更新ip的服务尽然被Q了。

因为是国外的服务我尝试使用代理进行更新ip,结果更新是成功了只是更新成了我代理服务器的ip地址。现在还没解..

解已经出来了:见Shell 脚本更新公网 IP 到 dynu DDNS 服务

我现在在mac端上使用的客户端为 dDns Broker 支持大部分服务商

端口转发

都知道国内建站域名是要进行备案的吧,既然有这样的要求就必定跟随着限制。
443, 8080, 80, 22 等常用端口都是默认被禁用的。

这里注意一个smb服务的端口,局域网访问和外网访问的端口并不是同一个。

端口 意义
139 Microsoft SMB 域服务器 netbios-ssn 局域网端口
445 Microsoft SMB 域服务器 microsoft-ds 广域网端口

我搭建成功的时候,Jenkins 当时的端口是8080, 转发8080端口完成后1个小时左右时间内是可以正常访问的,之后就不行了。

现存问题:
我使用了域名 显性转址 完成了自定义域名访问,只是访问后变回了no-ip的域名。 使用隐性转址,会造成无法解析的问题。

成果

完成了对家里机器 Jenkins 的访问, 远程控制( Mac 应用 Screen Shareing )访问,ssh登录 等

Reference

Apple 软件产品使用的 TCP 和 UDP 端口