在 NATed 环境中通过 xinetd 进行端口转发

在 NATed 环境中通过 xinetd 进行端口转发

我正在进行一项设置,该设置需要将来自 NATed 环境中某个服务器端口的请求重定向到其他服务器的端口(例如:来自 192.168.1.100:843 的所有请求都应重定向到 192.168.1.200:8443 - 两个服务器都在专用防火墙后面并且所有端口都相互通信。)

服务器 192.168.1.200 的端口 8443 上正在运行一项服务。我已通过 xinetd 在服务器 192.168.1.100 上配置了端口转发,如下所示。

service serv1
{
        bind            = 192.168.1.100
        protocol        = tcp
        flags           = REUSE
        socket_type     = stream
        port            = 843
        wait            = no
        user            = root
        redirect        = 192.168.1.200 8443
}

现在,当我在 LAN 内对 192.168.1.100 843 进行 telnet 时,我能够连接 192.168.1.200:8443 上的服务

-> telnet 192.168.1.100 843
Trying 192.168.1.100...
Connected to 192.168.1.100.
Escape character is '^]'.

但当我尝试通过 192.168.1.100 的公共 IP 进行连接时,我收到“连接已关闭”的提示

-> telnet 1.2.3.4 843
Trying 1.2.3.4...
Connected to 1.2.3.4.
Escape character is '^]'.
Connection closed by foreign host.

在执行 tcpdump 时我发现在后一种情况下请求并没有到达服务器 192.168.1.200 本身。

我在我们的一个 DC 中安装了类似的设置,运行良好。不知道这里是否出了什么问题。

谢谢,梅根

答案1

经过进一步调查,我发现它由于 TCPWrappers 而被阻止,添加适当的规则后,它运行正常。

以下内容添加到 /etc/hosts.allow

serv1: ALL

谢谢

答案2

bind如果您希望它监听分配给主机的所有 IP,则需要删除该行。

但是这并不能完全解释您的问题。如果这是您犯的唯一错误,那么与其他 IP 的连接将被拒绝,而不是建立连接后断开连接。

另一个 IP 地址上可能有其他东西正在监听同一个端口号。这甚至可能是不同的xinetd服务。如果您有另一个xinetd与此类似的服务,则可能解释了这个问题:

service serv2
{
        bind            = 192.0.2.42
        protocol        = tcp
        flags           = REUSE
        socket_type     = stream
        port            = 843
        wait            = no
        user            = root
        redirect        = 192.168.1.200 61868
}

此处的区别在于,另一个正在监听不同的 IP(但端口号相同),并连接到另一个已关闭的端口号。如果您这样做了,那么与另一个 IP 地址的连接将获得一个已建立的连接,xinetd一旦它意识到目标端口已关闭,该连接就必须关闭redirect

最后一部分只是猜测。如果你运行netstat -ntlpW,你应该能够看到,另一个 IP 上到底在监听什么。

相关内容