我想访问多个不同的设备居住在我的家庭网络,从世界上任何其他地方,使用自定义域名。
我正在运行我的ISP提供的标准(商业)路由器,并且没有改变的选项(他们不会提供第三方路由器所需要的ADSL连接的登录信息)。
我知道如何使用Nginx/Apache/反向代理访问运行web服务的Raspberry Pi,但也希望类似的功能(通过惟一域名访问单个设备)也适用于SSH。反向代理通常只处理HTTP(S)流量,因此不适用于此场景。
下面有一个评论提到了IPv6,但是如何通过标准的商业路由器来实现这一点呢?
发布于 2018-09-15 07:04:37
我使用包装器和SRV记录、索纳特和ProxyCommand ssh_config选项在互联网上为我的内部主机设置不同的名称。
首先,在路由器上需要适当的DNAT规则。让我们称它为router.example.com,IP地址为192.0.2.1,内部主机将是IP地址198.51.100.1的host1.example.com,该地址位于NAT之后。
规则是:
iptables -t nat -A PREROUTING -d 192.0.2.1 -p tcp --dport 2222 -j DNAT --to-destination 198.51.100.1:22现在您需要将此服务的SRV记录放在外部DNS中:
_ssh._tcp.host1.example.com. SRV 10 0 2222 router.example.com.让我们将ssh配置为使用上面提到的记录:
Host *.example.com
ProxyCommand wrapsrv _ssh._tcp.%h socat STDIO TCP:%%h:%%p例如,SOCAT也可以通过某种代理进行连接(我还在防火墙后面的一些设置中使用此选项,但SOCKS代理可用)。此外,您将无法对此域使用-p ssh选项。
现在,您还可能希望为路由器添加SRV记录,因此您不需要ssh_config中的特定部分就可以得到它:
_ssh._tcp.router.example.com. SRV 10 0 22 router.example.com.作为一个额外的好处,它使移动路由器上的sshd端口变得非常容易,以防止任何人太轻易地强迫您(是的,我知道,它是在那里广告,但到目前为止,我还没有看到任何人尝试我这样做的端口)。
https://serverfault.com/questions/930985
复制相似问题