这一直困扰我很长一段时间,我觉得这可能是可能的,但鉴于我的networking知识,我似乎无法想象如何。
用一个例子来理解最简单:如果我运行2台名为serverA和serverB的服务器,而且我希望能够将其中的每台服务器ssh,我可以通过ssh serverA.home.example.com或serverB.home.example.com并让我的内部DNSparsing这些请求,无论是从局域网内(这已经),但也通过广域网。
意识到这是一个例子,我知道这可以通过端口转发和改变每个ssh端口来完成 – 我只是对学习和理解DNS更感兴趣。
我的思路是如果一个DNS请求进入端口53,我的DNS服务器用我的公共IP地址(假设主机在它的表中)作出响应。 我无法弄清楚什么时候请求被提交给我的公共地址时,NAT将不知道请求的主机是哪个主机。
DNS将域名parsing为IP。 如果你想从外部访问,你需要公共IP地址。 一旦域名parsing完成,SSH将连接到IP。 如果您不指定端口,它将连接到默认端口(22)。 如果你有一个公共IP,NAT就无法知道你要连接到哪个主机,A或B – 正如你所说的那样。
选项来绕过它:
您需要有2个DNS服务器,一个用于为example.com回答并返回专用IP的局域网,另一个用于在同一个域上回答公共IP的互联网上的DNS服务器。