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

我正在进行一项设置,要求在服务器的一个端口上将请求redirect到其他服务器的端口(例如:192.168.1.100:843上的所有请求都应redirect到192.168.1.200:8443–两台服务器在专用的防火墙之后,并且互相通信所有端口。)

服务在服务器192.168.1.200的端口8443上运行。我已经通过xinetd在服务器192.168.1.100上configuration了端口转发,如下所示。

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 } 

现在当我在局域网内telnet到192.168.1.100 843时,我可以连接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我得到“连接closures”

 -> 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和它的工作正常。 任何想法,如果任何事情可能出现问题。

谢谢,Meghanand

那么进一步调查后,我发现它被阻止,由于TCPWrappers添加适当的规则,其工作正常。

以下添加到/etc/hosts.allow

 serv1: ALL 

谢谢

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

但是,不能完全解释你的问题。 如果这是唯一的错误,连接到其他IP会被拒绝连接,而不是一个build立的连接,然后断开连接。

其他的东西可能在监听另一个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(但是相同的端口号),并且连接到另一个被closures的端口号。 如果这是你所做的,那么连接到另一个IP地址将得到一个已build立的连接,一旦实现, xinetd必须closures, redirect的目标端口被closures。

最后一部分只是猜测。 如果你运行netstat -ntlpW ,你应该能够看到真正在其他IP上监听的信息。