我正在进行一项设置,该设置需要将来自 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 上到底在监听什么。