Я работаю над настройкой, которая требует перенаправления запроса, поступающего на один из портов сервера, на другой порт сервера в среде с NAT (пример: все запросы, поступающие на 192.168.1.100:843, должны быть перенаправлены на 192.168.1.200:8443 - оба сервера находятся за выделенным межсетевым экраном и обмениваются данными по всем портам.)
Служба работает на порту 8443 сервера 192.168.1.200. Я настроил переадресацию портов на сервере 192.168.1.100 через xinetd следующим образом.
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 '^]'.
Но когда я пытаюсь подключиться через общедоступный IP-адрес 192.168.1.100, я получаю сообщение «соединение закрыто».
-> 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-адрес.