我家里目前有一个 DSL 调制解调器,它有一个静态 IP(例如77.77.77.77
)。
此调制解调器连接到一个无线路由器,该路由器上连接了几台机器。
为了简单起见,从现在开始,我将背后的网络77.77.77.77
称为home-net
我的目标是能够ssh
进入任何机器,home-net
而无需诉诸丑陋的port-forwarding
端口映射。
为了实现这一目标,我的计划是:
- 在任何我想要的机器上
77.77.77.77 home-net
添加条目hosts
ssh
port-forwarding
在路由器上设置home-net
DNS 查询- 运行的计算机(在同一网络上)
bind
接收这些 DNS 查询并将其解析为 LAN IP
我不完全明白如何实现它..我希望将 DNS 查询发送到home-net
询问相关系统(示例pc1
),该查询将被转发到正在运行的机器bind
,并将其解析为某个 LAN IP..但我不确定这是否足以解决问题..
我还无法实现或测试这一点。遗憾的是,使用设置 DNS 服务器bind
似乎比我预想的要复杂得多。
我的问题是:
home-net
是否可以用这个单一静态 IP 通过 ssh 接入任何机器port-forwarding
?- 示例和(均为默认端口 22)?
ssh [email protected]
ssh [email protected]
- 示例和(均为默认端口 22)?
- 这个设置能起作用吗?
- 有没有更简单的方法可以做到这一点?
答案1
你的问题中所有内容都是完全错误的。
我的目标是能够通过 ssh 进入家庭网络后面的任何机器,而无需借助丑陋的端口转发和端口映射。
解决这个问题的唯一方法是拥有多个公共 IP 地址。如果您只有一个 IP(住宅 ISP 连接通常如此),则必须使用端口转发。
但是,还有另一种方法,我将在下面描述。
为了实现这一目标,我的计划是:
- 将条目 77.77.77.77 home-net 添加到我想要 ssh 的任何机器上的主机
- 在家庭网络路由器上设置端口转发以进行 DNS 查询
- 运行 bind 的机器(在同一网络上)接收这些 DNS 查询并将其解析为 LAN IP。如果您
以上内容存在的所有错误均在此。
- 您的
/etc/hosts
文件仅用于本地系统上的 DNS 解析。它与任何其他系统无关。其他系统无法访问此文件。 - 您可以将 53 端口转发到
bind
网络上运行的端口。它甚至可以返回 LAN IP,正如您所描述的那样。 问题是这些 LAN IP 在您的网络之外对您毫无用处,除非它们是 ISP 分配的公共 IP。您无法从外部连接到它们。 简单来说,192.168.XX 范围内的 IP 基本上是私人的范围并且无法路由到公共互联网上。
现在,一切还不算太糟。如果你想从外部创建一条进入你网络的路径,这是可能的,而实现这一目标的方法是通过 VPN。OpenVPN 可以做到这一点,值得研究。
帮助您开始研究的快速概述:
- 您可以在网络上的系统上设置 OpenVPN 服务器,并为其打开一个端口。在 Linux 机器上将其设置为“桥接”VPN,该 VPN 位于家庭网络所在的同一子网中(通常为 192.168.1.0/24,请检查您的路由器)。您需要查找动态 DNS 提供商(例如 DynDNS 或 EasyDNS)并进行
ddclient
配置。 - 然后,您需要在笔记本电脑或其他从外部连接到它的系统上设置 OpenVPN 客户端。
- 当您启动 OpenVPN 客户端时,您将通过 VPN 连接到您的家庭网络。您甚至可以从家庭路由器获取 IP。
答案2
如果我正确理解了您提出的解决方案,答案是否定的,除非您转发 ssh,否则这将不起作用。即使您获得了家庭网络 IP,从外部客户端的角度来看,它们也是不可路由的,因为它们不是可公开路由的地址。您的客户端可以使用家庭网络 IP 作为目的地来格式化数据包,但它到达的第一个路由器将丢弃它。
DNS 实际上与该问题或解决方案几乎没有关系,但请考虑您无法在大多数客户端操作系统上设置特定于域的 DNS 服务器,因此必须将客户端配置为对所有查询使用 home-nets 绑定实例,而不仅仅是针对 home-net 地址的查询。
最后,您仍然需要为想要 ssh 进入的每台机器转发端口,否则您将无法连接。
如果您可以获得 DNS 注册,则可以创建子域并将它们指向路由器上的不同端口转发规则(每个规则都会将您带到不同的主机),但这仍然需要为您计划连接的每个主机设置一个端口转发规则。
考虑创建一个单独的服务器,然后通过 ssh 进入该服务器,再从该服务器 ssh 进入其他内部服务器。如果不通过路由器转发该服务器上的 tcp22,或将其设置为 DMZ 主机(所有不符合转发规则的未经请求的流量都将被定向到该主机),则无法实现此目的。如果采用这种方法,请务必将其锁定。
答案3
使用 来隐藏客户端 ssh 配置中的丑陋之处ProxyCommand
。
这需要一个端口转发的 ssh 来充当“代理”。您的一个家庭服务器的 ssh 客户端配置示例:
$ cat ~/.ssh/config
Host friendlyname1 friendlyname2 # optional
Hostname 10.10.10.10 # ip of home server
# works best if you configure ssh keys authentication to [email protected]
ProxyCommand ssh -W %h:%p [email protected]
现在ssh root@friendlyname1
或就可以正常工作了。后台 ssh 客户端将首先连接到ssh [email protected]
[电子邮件保护]从那里到 10.10.10.10
答案4
你不能只设置一个家庭 DNS 服务器,然后创建一些 SRV 记录吗:
$ORIGIN home-pc.net.
@ SOA etc... etc...
...
_ssh._tcp SRV 1 0 22 server1.home-pc.net.
SRV 2 0 22 server2.home-pc.net.
SRV 3 0 22 server3.home-pc.net.
SRV 4 0 22 server4.home-pc.net.
或者我仍然不明白 SRV 记录是如何工作的?:P