问题
如果我通过域名(即通过外部 IP 地址)连接到我的家庭服务器,数据包会传输到哪里?它们是先传输到家庭路由器,再传输到我的 ISP 路由器,然后再返回吗?如果它们接触到我的 ISP 路由器,那么我将为此使用付费。
背景
我已经在家庭服务器上设置了 OwnCloud。我经常从同一个内联网连接,可以使用 192.168.1.1。但是,如果我在不同的网络上,我会通过动态分配给 IP 地址的域名进行连接。为了便于配置,我考虑始终使用域名来指定服务器。
一些测试
我已经通过 ping 进行了测试,使用内部 IP 地址时可以获得稍快的结果。
$ ping -c 10 192.168.1.1
...
rtt min/avg/max/mdev = 1.064/1.173/1.263/0.072 ms
$ ping -c 10 myname.dynu.com
...
rtt min/avg/max/mdev = 1.191/1.459/2.549/0.375 ms
我尝试在两者上使用 traceroute。内部 IP 地址超时(可能是由于防火墙设置?)。外部有一个跳转到my-external-ip-address.dyn.iinet.net.au
。我不确定这是指我的路由器,还是交换机上的节点。
答案1
如果您有一个普通的 NAT/PAT 配置,当您尝试通过 DNS 中的外部公共 IP 地址从内部私有网络主机与其邻居(也在内部私有网络上)建立连接时:
您的浏览主机尝试在 IP ABCD、端口 X 上建立 TCP 连接。它查阅其本地路由表,但该表没有与 ABCD 的特定匹配,因此转到其默认网关。
您的默认网关从其内部接口收到一个数据包,该数据包的地址为 ABCD,查询其路由表,发现与外部公共接口完全匹配。该数据包不再转发,因为它已到达其明显目的地。在上述 PING(ICMP 回显请求)的情况下,它不是 TCP 数据包,因此不需要 NAT 或 PAT,路由器本身会发出 ICMP 回显回复并将其发回,从而将 RTT 增加十分之几毫秒。
不幸的是,大多数 PAT 实现只能处理从外到内的转换,而不能处理从内到内的转换。如果 TCP 请求从内部发送到路由器的公共 IP,路由器将丢弃该数据包。它可能会或可能不会发送 ICMP 消息来通知请求主机:如果不发送,请求将超时;如果发送,请求将立即被拒绝。
此特定流量实例将不会穿越您的 ISP 的连接。
以下是关于建立“发夹式”连接的目标的其他信息: https://superuser.com/a/444207/214597