关于端口转发和数据包的一些疑惑

关于端口转发和数据包的一些疑惑

我正在尝试在我的 Linux 机器上打开一个端口,但遇到了一些问题。我查找了一些有关端口转发的信息,找到了这个什么是端口转发以及它有什么用途? jcrowfordor 的帖子(带有图片的长帖子)帮助我更好地理解它。

但是我在打开端口时仍然遇到一些问题。我查阅了教程和视频,但总是显示:

  • 1-在路由器中转发端口
  • 2-下载 ufw
  • 3-在 ufw 中创建一条规则,允许入站流量到该端口

我做了所有这些,但没有效果。也许我做错了什么?我对端口转发仍有一些疑问,所以我认为消除这些疑问可能会帮助我弄清楚我做错了什么。

此外,整个防火墙配置+路由器端口转发可能没有必要,因为我有一个 Linux Mint VM,它接受使用 netcat 绑定的任何端口的入站流量(我使用 sudo nc -l portnumber)。为什么会这样?除了禁用 Linux Mint 的防火墙外,我没有配置任何东西。如果我禁用其他 Linux 的防火墙,它仍然会拒绝连接。

我对端口转发的疑问是:

  1. 当网络中的计算机想要与该网络中的另一台计算机通信时,它发送到路由器的数据包是否算作入站流量?如果算,为了让目标计算机接收它,我必须在路由器上转发一个端口,对吗?
  2. 如果我想让 2 台或更多台计算机能够通过同一端口接收连接,该怎么办?我是否必须在路由器中为所有这些计算机转发该端口?
  3. 如果是,路由器如何知道应该将入站流量发送到哪台计算机?当流量来自网络时和来自网络外时会发生什么?

答案1

1) 不会。它直接进入 LAN 服务器,无需经过路由器(路由器 WAN 上永远不会收到它)。大多数商用路由器不允许内部主机连接到路由器 WAN。那些允许的路由器支持所谓的 NAT Hairpinning。要测试没有 hairpinning 的 NAT 端口转发规则,您必须从另一个网络进行测试。

2) 如果您希望两个不同盒子上的 tcp\80 进行转发,则必须使用不同的外部端口号,以便 WAN:80 -> PC1:80 和 WAN:81 -> PC2:80。WAN 端的端口号必须是唯一的,否则无法分辨您要使用哪个服务器,并且 NAT 转发始终是单播的,因此您无法将数据包发送到两个内部服务器。

3) NAT 规则要求您指定将接收端口传入数据包的 LAN 服务器的本地 IP 地址。

答案2

netcat问题解决办法:

使用 nc -l -p port 而不是 nc -l port。就这么简单。

相关内容