HA文档 目录

  1. 主页
  2. HA文档
  3. HA文档
  4. 通过INTERNET访问
  5. 端口映射

端口映射

这篇文章是系列文章的第1/4篇:

常见的端口映射方案有两种,一种是在路由器上设置,一种是通过隧道。
【在路由器上设置端口转发】

不同的路由器上设置端口转发的界面会有所差别。
我们假设路由器的外网地址为1.2.3.4,HomeAssistant的IP地址为192.168.0.2,我们希望将发往路由器外网1234号端口的数据转发到192.168.0.2的8123号端口。在路由器的端口映射中,主要需要配置以下信息:

  • 端口号:在路由器外网地址上开放的端口号,设置为1234。
  • 转发目标IP地址:内网的IP地址,设置为192.168.0.2。
  • 转发目标端口号:目标IP上开放的端口号,设置为8123。

在配置了上面规则之后,就可以在INTERNET上通过访问1.2.3.4的1234端口(http://1.2.3.4:1234)进入HomeAssistant的WEB界面了。

【隧道模式】

隧道模式通过在内网主机与INTERNET上的隧道服务器之间建立实时通讯隧道,将客户端的访问通过隧道转发给内网的目标主机。
可以自己租用云服务器,通过免费开源的ssh构建隧道;也可以通过花生壳的“内网穿透”服务完成隧道的构建。
我们以亚马逊的AWS云服务为例,说明隧道模式的建立。

  1. 注册并登录亚马逊的AWS服务
  2. 申请AWS中免费套餐,申请一台ec2虚机(选择Linux类的实例),并配置公网的弹性IP(亚马逊会自动配置一个域名绑定这个IP地址)。这时候按照AWS中“连接”菜单中的提示,可以使用ssh客户端登录到服务器上了。
  3. 在AWS中应用到虚机上的安全组策略中,增加入站策略,允许外网访问1234号端口(这是后面要开放给INTERNET的端口,您也可以选择其它端口号)。
  4. 修改/etc/ssh/sshd_config文件(sudo nano /etc/ssh/sshd_config),在末尾增加一行配置:
    GatewayPorts clientspecified
    注:此配置项含义是:客户端申请打开远程ssh隧道时,在服务器端打开的端口根据客户端的配置决定是向本机开放还是向INTERNET开放(缺省情况下不管客户端如何配置,只开放给本机)。
    重新启动sshd(或者重新启动虚机)。
  5. 在内网的机器上,如果使用的是ssh客户端(Linux或MacOS),使用下面的命令连接到虚机,在登录到服务器的同时,建立隧道:
    ssh -i "etc/amazonkey.pem" -R 0.0.0.0:1234:192.168.3.53:8123 ubuntu@ec2-18-221-**-**.us-east-2.compute.amazonaws.com
    如果使用的是putty客户端(Windows),使用下面的配置:

    注:-R a:p1:b:p2的含义:打开服务器上的p1端口,向a开放(a为0.0.0.0或*代表所有网络,a为127.0.0.1代表本机),这个端口上的所有网络流量会通过ssh隧道转发到客户端,并由客户端转发到b地址的p2端口。
  6. 根据以上的配置,就可以在INTERNET上通过访问http://ec2-18-221-**-**.us-east-2.compute.amazonaws.com:1234/访问到客户端所在内网的HomeAssistant了。
  7. 如果要在客户机系统启动的时候自动建立ssh隧道,并且在异常时自动重新连接服务器端,可以安装autossh软件,并加入到自启动脚本中。
    下载安装autossh:sudo apt-get install autossh
    在/etc/rc.local中增加以下代码(需要修改其中网关地址,以及目标主机地址等):

注:不管是亚马逊的AWS还是花生壳的“内网穿透”服务,都包含了动态域名,所以如果用这种方案建立端口映射的话,可以不再需要额外的动态域名服务。

与在路由器上设置的方案相比,隧道模式不需要调整路由器的设置(当有多层内网,或者自己不掌控路由器的管理权时是比较麻烦的);但隧道模式下,必须有一台位于INTERNET上的服务器配合,同时内网中必须运行一个隧道客户端程序。

遇到问题了?快来学习免费在线课程吧,博学老司机在线答疑,找到更多志同道合的HA玩家一起进步

此文不允许转载,如需转载请与BD@hachina.io联系。

这篇文章对您有用吗? 0 0