При прослушивании порта (сервера задач) локальный адрес должен быть `localhost` или`0.0.0.0`?
Я пытался сделать taskd
Сервер работает на моем компьютере (Arch Linux) в течение нескольких дней. Проблема, с которой я сталкиваюсь сейчас, заключается в том, что taskd
В документации по конфигурации ( https://taskwarrior.org/docs/taskserver/troubleshooting-sync.html) сказано, что я должен использовать вывод hostname -f
как адрес (я не знаю, что сокращает "CN"). Я также пытался с моим локальным IP-адресом, начиная с 192.168
но это дало мне ошибку рукопожатия, которую вы можете найти в руководстве по устранению неполадок, которое я связал.
Я начал немного заниматься расследованиями, потому что не мог получить доступ к своему серверу задач с других машин. Я нашел это:
Когда я слушаю порт, который я использую, пусть будет 54000
, с помощью nc -l -p 54000
Я могу видеть это как вывод ss -lntu | grep 54000
:
tcp LISTEN 0 10 0.0.0.0:54000 0.0.0.0:*
Тогда как я начинаю taskd
, который слушает на том же порту, ss
дает мне:
tcp LISTEN 0 4 127.0.0.1:54000 0.0.0.0:*
Теперь с другой машины, я попытался проверить порт во время прослушивания с nc -vv 192.168.x.y 54000
(с IP-адресом сервера), и я обнаружил, что когда локальный адрес 0.0.0.0
Порт отображается как открытый. В противном случае он отображается как закрытый. Я думаю это потому что 127.0.0.1
по существу localhost
и я не могу видеть это из моей сети?
taskd
также есть файл конфигурации с опцией сервера, где я ввел вывод hostname -f
, который watermelon.localdomain
, как мне указали в документации. Я полагаю, это то, что переводится на localhost
, право?
Буду очень признателен за вашу помощь, заранее спасибо!
ОБНОВЛЕНИЕ 2018/04/21
Мне удалось решить проблему, установив server
переменная в конфиге 0.0.0.0:54000
таким образом я получил taskd
прослушивать любой адрес на порту 54000
, Теперь все работает прекрасно. Документация taskd
было немного расплывчато по теме, я думаю.
1 ответ
Сокеты настроены на прослушивание по конкретному IP и порту. Обычно есть две основные конфигурации, которые вы бы использовали для Socket, и третья, которая не столь распространена, но удобна.
1) Разрешить связь только с машины, на которой запущена служба
Это настраивается, когда вы видите 127.0.0.1:54000
, Только хост-машина может получить доступ к этой услуге. Вы можете использовать что-то вроде обратного прокси, чтобы разрешить внешний доступ, но ничто в сети не сможет подключиться к нему.
2) На все машины в любой сети, доступные с сервера
Это настраивается, когда вы видите 0.0.0.0:54000
, Это позволяет любому разговаривать с этой службой, пока пакеты могут добраться до нее.
3) Только к определенной сети, к которой подключен сервер
Это настраивается, когда вы видите 192.168.0.2:54000
(или любой другой IP). Это означает, что доступ разрешен ТОЛЬКО к этой подсети этой сети.
Если вы хотите разрешить подключение вашей службы к другим компьютерам в сети, ее необходимо 0.0.0.0
или локальный IP.