端口转发(又名静态 PAT)允许在任何外部源端点到特定内部端点之间进行公共 IP 和特定端口的固定转换。
但是,如果发送了一个数据包从在那个特定的内部端点,在我的路由器上,我看到使用了动态 PAT 并且通过临时端口映射建立了流量。
这是典型的路由器行为吗?如果是,可以编辑哪些路由器选项/配置页面来更改此行为(如果有的话)?
答案1
您可能看到的是 NAT(网络地址转换):来自本地网络的连接其源地址被重写为路由器的源地址。由于可能存在多个传出连接,因此源端口也被重写,以便可以将其映射回(原始源地址,原始目标地址)对。
是的,这是许多家用路由器的默认行为,因为通常您的 ISP 只会为您提供一个 IPv4 地址,并且您所有的家用设备都必须共享该地址。
如何禁用此功能完全取决于您路由器品牌的用户界面。查找“NAT”或“网络地址转换”。请注意,如果您禁用它,您将不得不告诉您的 ISP 为您路由多个 IP 地址,这通常要花费相当多的费用。
这与端口转发(或 PAT,如您所称)完全不同,其中路由器上的目标端口被映射到本地网络中具有特定端口的特定设备。还请注意,一旦建立了这样的连接,实际连接可能会使用不同的端口对,这些端口对可能再次经历 NAT。
编辑
端口转发的典型工作方式如下:
假设您有一个 Web 服务器在内部计算机 A 上监听 8080 端口。路由器 R 将其自己的 80 端口转发到 A 上的 8080 端口。
现在,互联网上某台计算机 I 向端口 80 上的 R 发送请求。R 重写该数据包并将其发送到端口 8080 上的 A。在收到连接请求后,A 分叉一个新进程,并使用该端口与 I 建立连接。
现在 R 应该使用正确的连接跟踪并识别出 I 和 A 已建立连接。这意味着 NAT 将根据识别的连接更改端口,即从 8080 转换为 80。
因此,您想要的功能(“将传出端口映射到传入时转发的同一端口”)在这种情况下没有用。映射的是联系。
如果您出于某种原因需要这样的规则,即使在没有建立连接的情况下也能工作(我无法想象您为什么需要它),那么您可以这样做,但您需要对路由器 R 的 root 访问权限(这可能意味着像 OpenWRT 这样的自定义固件),并且您需要iptables
自己为此添加规则。
真正有趣的问题是:您在其他方向上映射端口的用例是什么?您认为为什么需要配置它?