NFTables:是否有可能在不伪装的情况下转发流量?

NFTables:是否有可能在不伪装的情况下转发流量?

我有一台远程服务器 (B),它将某些传入流量转发到另一台服务器 (A,目标) 的另一个端口。
使用“伪装”我只能看到来自转发服务器 (B) 的流量,是否可以看到来自原始源 (C) 的流量?如果我将“伪装”替换为“接受”,我将无法再访问目标 (A) 的 8080 端口。

草图:

C -> B:25 -> A:8080
# A receives C requests as if B made them
# Unfortunately this breaks some implementations like SPF

NFTables 配置:

# define destination address
define dest = 10.0.0.2

# table for smtp forwarding
table ip smtp {
 chain pre {
  type nat hook prerouting priority -100
  tcp dport 25 dnat to $dest:8080
 }
 chain post {
  type nat hook postrouting priority 100
  ip daddr $dest masquerade
 }
}

答案1

作为泰罗·基尔卡宁很高兴回答我的问题,我希望可以为您提供一个最小的工作示例。

先决条件:

  1. 必须激活 IP 转发(检查sysctl -a | grep forwardremote server
  2. 两台服务器必须位于同一网络中
  3. different server必须具有remote server默认网关(在您的情况下这可能吗?)
  4. 内核应该是 4.18,否则你还需要定义一个后路由规则(见nftables 维基
  5. 您的外部接口是remote server否则enp35s0相应替换

鉴于此,您可以使用以下 NFTables 规则

table ip nat {
        chain prerouting {
                type nat hook prerouting priority 0; policy accept;
                iif "enp35s0" tcp dport 25 dnat to 10.0.0.2:8080
        }
}
table inet filter {
        chain input {
                type filter hook input priority 0; policy accept;
        }

        chain forward {
                type filter hook forward priority 0; policy accept;
        }

        chain output {
                type filter hook output priority 0; policy accept;
        }
}

要调试,请检查different server

相关内容