如果私有地址块只是用来让路由器决定数据包可以从哪里转发和不可以从哪里转发(因为私有地址在自己的网络上需要是唯一的,但可以在不同的网络上重复),那你为什么需要一个网络地址翻译服务?
如果主机需要连接到网络,为什么不完全跳过私有地址并分配一个公共地址?
多亏了大家,现在答案更清楚了。私有地址的推理已经让我无法理解,我很困惑,当通过分类寻址浪费了这么多 IP 地址时,为什么我们还需要它。我没有(现在仍然不太明白)为什么我们不能重新分配 IP 以更好地利用我们已有的地址。
我有一个 951G-2HnD 作为路由器。所有连接均通过以太网电缆进行。我观察到以下几点:
现在因为3,我认为问题不在路由器处理能力上。我想 NAT 处理有问题。如何提高速度,使 NAT 连接与直接连接一样快?或者至少我如何调试问题?
以防万一,我禁用了除主要规则之外的所有 NAT 规则:
/ip firewall nat chain=srcnat action=masquerade out-interface=ether1-gateway
Run Code Online (Sandbox Code Playgroud)
这并没有提高速度。
1998 年,我尝试在 NT3.51 上向 Internet 开放文件和打印机共享,但它只是拒绝实际工作。
IP 端口和协议是否必须通过端口转发才能使文件和打印机共享可用于 Internet?
阅读KB298804 - Internet firewalls can prevent browser and file sharing,它说有两个端口范围:
我在路由器上打开这些端口范围,将它们 NAT 到我的台式机,但我无法从外部访问它们:

LAN 上的其他机器可以访问共享。
路由器上的数据包捕获显示流量正在到达我的家用机器。我的工作机器正在尝试直接连接(没有 NetBIOS)。然后它 ping,然后它疯狂地继续尝试其他端口:
IP/TCP 69.59.196.211:445 <== 216.8.139.6:59763 tcp 0
IP/ICMP 69.59.196.211 <== 216.8.139.6 ICMP echo request
IP/ICMP 69.59.196.211 ==> 216.8.139.6 ICMP echo reply
IP/TCP 69.59.196.211:139 <== 216.8.139.6:59764 tcp 0
IP/TCP 69.59.196.211:445 <== 216.8.139.6:59763 tcp 0
IP/TCP 69.59.196.211:139 …Run Code Online (Sandbox Code Playgroud) 我在两个不同的主机上安装了 VMWare Workstation 7.1.x 和 Virtualbox 4.0.8,所以我可以比较。
我将两者上的虚拟网络适配器都设置为 NAT,这对两者都是成功的。结果:
Virtualbox 地址:10.10.2.13 VMWare 地址:192.168.0.20
分配给 VMWare 来宾的 IP 是预期的。但是我对提供给 virtualbox 的 IP 地址感到惊讶。这些机器在我的家庭网络上,只有 NAT 地址(192.168.xx),所以当我看到 10.10.2.x 时 - 我有点惊讶。
然后我将两个 VM 切换为使用桥接网络。VMWare 来宾继续使用 NAT 地址,但 Virtualbox 也开始使用 NAT 地址。
简而言之,我认为 VMWare 来宾行为是我所期望的。Virtualbox 的行为对我来说很奇怪。如果有的话,我希望 Virtualbox 做相反的事情(对 NAT lan 适配器使用 NAT 地址,对桥接例程使用非 NAT 地址)。不要误会我的意思,我很惊讶在任何配置下看到 Virtuabox 的非 NAT 地址。
但是有人可以向我解释为什么我得到了我所做的结果吗?以及如何/为什么 IP 地址 10.10.2.x 在我的家庭网络上“工作”?
请记住,两个 VM 来宾始终都可以成功联网。
我有一个绑定到localhost:7060. 它使用 ipv6 套接字而不是 ipv4。下面是 netstat 输出。
# netstat -an
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 10.200.32.98:1720 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:4122 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:4123 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:4123 127.0.0.1:43051 ESTABLISHED
tcp 0 0 10.200.32.98:5555 10.200.32.44:53162 ESTABLISHED
tcp6 0 0 :::5060 :::* LISTEN
tcp6 0 0 ::ffff:127.0.0.1:7060 :::* LISTEN
tcp6 0 0 :::23 :::* LISTEN
tcp6 0 0 ::ffff:10.200.32.98:23 ::ffff:10.200.32.142:43505 ESTABLISHED
tcp6 0 0 ::ffff:127.0.0.1:43051 ::ffff:127.0.0.1:4123 ESTABLISHED …Run Code Online (Sandbox Code Playgroud) 我刚刚发现了一些奇怪的东西:
http://whatismyip.org/说我的 IP 地址是 82.44.14.246
http://www.whatismyip.com/说我的 IP 地址是 31.52.118.197
我在英国,在一个做 NAT 的路由器后面。我当地城镇的第一个地址geo-ip;第二个地址 geo-ip 指向东南海岸的一个 IP,距离超过 100 英里。
怎么会这样?似乎不同的网站看到我(或至少我的 NAT 路由器)有不同的 IP 地址。我认为每个设备都应该在整个 Internet 上拥有一个地址。发生了什么类型的网络活动导致这种情况?正常吗?它会导致问题吗?
我需要标记发送到指定 MAC 地址的数据包。
我需要这个在 shaper 中使用tc。
--mac-destination不存在于iptables.
我也尝试使用ebtables:
ebtables -t nat -A POSTROUTING -d 9c:4e:36:aa:bb:cc -j mark --set-mark 0x2003 --mark-target ACCEPT
但它没有标记任何东西(至少ebtables -t nat -L --Lc显示了 0 个计数器)
请帮忙!太感谢了!
我试图让我的应用程序在 Docker 中正常运行,但遇到了问题。
该应用程序以 PASV 模式连接到远程 FTP 服务器,并 PUT 文件。非常简单,无需 docker 即可正常工作。FTP 服务器和客户端都不在任何 NAT 之后;但是客户端变成了 NAT,因为我使用的是 Docker 桥接网络。(使用默认网桥配置http://pastie.org/10954592)
如果我在运行客户端应用程序时查看 FTP 服务器上的 tshark,它会交换大量数据包,因此它正在“连接”到服务器,但应用程序没有收到任何回复。这让我假设当 FTP 服务器尝试在该经验端口上响应时,它不会从主机操作系统路由回 Docker 容器。
所以,希望总结一下,有没有什么好的方法可以将这些 pasv 端口正确转发到 docker 网桥?约束:我无法控制生产中的 FTP 服务器,所以我不能简单地硬编码 iptables 的 pasv 端口列表。
感谢您的任何想法!
我一直无法清楚地解释硬件 NAT 在我的路由器上的用途。
有一些报告称禁用此功能会增加有线连接速度。
禁用此选项是否有任何副作用?
我试图了解 NAT 和 NAT 表的工作原理,但似乎无法在线找到答案。我有几个关于 NAT 的问题。假设已建立 TCP 连接。
假设路由器有 WAN 201.22.14.15
1) 假设 IP 为 192.168.1.1 的设备想要连接到 IP 为 137.132.1.15 的服务器。设备首先将数据封装在一个 IP 数据报中,源 IP 为 192.168.1.1,目标 IP 为 137.132.1.15?
2) 之后数据报被发送到发生 NAT 的路由器。假设这是在专用网络中发送的第一个数据包,NAT 表最初是空的?
3) 现在表中有一个条目将 192.168.1.1:1234 映射到 201.22.14.15:2345。?
192.168.1.1:1234 -> 201.22.14.15:2345
Run Code Online (Sandbox Code Playgroud)
IP 数据报在发送前会使用相应的路由器地址(201.22.14.15)和端口号 2345 重新打包。从路由器到服务器是否有单独的 TCP 连接?或者该条目只是分配了一个虚拟端口号?
4)数据从服务器137.132.1.15返回,dst IP为201.22.14.15,目标端口为2345。路由器查表,发现201.22.14.15:2345映射到192.168.1.1:122 所以它重新打包了 src 地址为 137.132.1.15:80 和 dst 地址为 192.168.1.1:1234 的 IP 数据报
我不确定我强调的步骤是否正确。
nat ×10
networking ×6
iptables ×3
windows ×2
android ×1
docker ×1
file-sharing ×1
firewall ×1
ftp ×1
internet ×1
ip ×1
ip-address ×1
platform ×1
router ×1
samba ×1
virtualbox ×1