最近家里换了一个路由器,旧的是D-Link DIR-300,新的是Keenetic Lite,家里有两台电脑,就叫和desktop
吧laptop
。
问题是,在我更换路由器之前,我能够laptop
像desktop
这样连接:
ssh user@desktop
并且效果很好;现在当我尝试这样做时,我得到了
ssh: Could not resolve hostname desktop: Name or service not known
这显然意味着 ssh 不再知道desktop
是什么了。
当我运行 时,计算机似乎仍然在本地网络中可见,nmap -sP 192.168.1.*
两台计算机的 IP 地址都在那里。此外,我认为问题不在于ssh
它本身:当我在路由器上设置端口 22 转发时,我能够ssh
使用它们的外部 IP 地址进入两台计算机。但是,使用本地 IP 地址会导致port 22: connection refused
。
以下是我的问题:
- 首先,主机名是如何解析的?当我这样做时
ssh user@desktop
,程序如何找出应该连接到哪个 IP? - 我该如何修复我的设置以便它能够再次执行该操作?
- 为什么我无法
ssh
使用本地 IP 地址进行连接?
答案1
您的旧路由器可能已运行自己的 DNS 服务,并且您曾输入名称laptop
并desktop
告诉它始终为它们分配相同的地址。或者,您的计算机可能实际上已命名laptop
,并且desktop
旧路由器的 DHCP 服务在它们请求地址时会获取该名称。
因此,要解决这个问题,您需要在路由器中找到等效设置,或者绕过它。非移动设备(iThings 和 'droids 等)的常见解决方法是使用该hosts
文件提供名称到 IP 地址的映射。或者,使用第三个设备提供该服务 - 我使用 Raspberry Pi 提供 DHCP、本地网络 DNS(desktop.home.test
)、仅缓存 DNS 服务器(用于外部查找)和 DHCP 服务。涉及更多手动配置,但对于系统管理员/开发人员来说这并不多...
至于无法通过 IP 地址连接,假设地址正确,则可能是您的路由器将无线连接与有线连接分离到不同的子网,并阻止它们之间的通信。这对于提供访客访问来说可能很常见,因此客户端可以访问互联网,但无法查看/访问本地子网上的计算机。同样,这个问题的解决方案实际上取决于路由器、它运行的软件/固件版本等。
根据您当前的路由器/调制解调器的功能,您可能需要考虑在其上安装第三方固件/操作系统之一,它们都倾向于提供所有这些服务以及更多服务(例如 QoS 等)