侦听端口(任务服务器)时,本地地址应该是“localhost”还是“0.0.0.0”?

bp9*_*p99 5 networking linux port ip localhost

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:*
Run Code Online (Sandbox Code Playgroud)

而当我开始时taskd,它在同一个端口上侦听,ss给了我:

tcp    LISTEN   0        4               127.0.0.1:54000          0.0.0.0:*
Run Code Online (Sandbox Code Playgroud)

现在在另一台机器上,我尝试在侦听时检查端口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我猜关于这个主题的文档有点含糊。

And*_*rew 5

套接字被配置为侦听特定的 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上。