Назад | Перейти на главную страницу

Перенаправление портов через xinetd в среде NAT

Я работаю над настройкой, которая требует перенаправления запроса, поступающего на один из портов сервера, на другой порт сервера в среде с 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-адрес.