Xinetd

在 NATed 環境中通過 xinetd 進行埠轉發

  • August 1, 2014

我正在研究一種設置,該設置需要將來自伺服器埠之一的請求重定向到 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 時,我可以在 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 中進行了類似的設置,並且工作正常。任何想法,如果這裡有什麼問題。

謝謝,梅加南德

好吧,經過進一步調查,我發現它由於 TCPWrappers 而被阻止 添加適當的規則後它的工作正常。

以下添加到 /etc/hosts.allow

serv1: ALL

謝謝

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 上真正監聽的是什麼。

引用自:https://serverfault.com/questions/617167