首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ubuntu22.04桌面:重新启动时,一些服务不绑定到公共IP,只绑定本地主机

Ubuntu22.04桌面:重新启动时,一些服务不绑定到公共IP,只绑定本地主机
EN

Ask Ubuntu用户
提问于 2023-04-05 22:16:59
回答 2查看 74关注 0票数 1

我有一个Ubuntu22.04桌面的新安装,我想在上面运行公共服务(postgreSQL,redis等)从其他主机访问。我将每个服务配置为绑定(侦听)到静态IP 192.168.1.xxx以及localhost,启动它们,它们就能工作了。

当我重新启动计算机时,这些服务不监听192.168.1.xxx,只监听localhost/127.0.0.1。当我重新启动服务时,它绑定到所有地址。没有变化。没有防火墙。SSH确实通过IP地址进行连接。下面是在重新启动后立即在本地运行的Redis示例的粘贴。

代码语言:javascript
复制
% sudo ufw status                                                                                                 
Status: inactive

% redis-cli -h 192.168.1.200
Could not connect to Redis at 192.168.1.200:6379: Connection refused
not connected>

% redis-cli -h 127.0.0.1
127.0.0.1:6379>

% redis-cli -h localhost
localhost:6379>

% sudo lsof -i :6379
COMMAND    PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
redis-ser 3004 redis    6u  IPv4  35436      0t0  TCP localhost:redis (LISTEN)
redis-ser 3004 redis    7u  IPv6  35437      0t0  TCP ip6-localhost:redis (LISTEN)

% sudo service redis-server restart

% sudo lsof -i :6379
COMMAND     PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
redis-ser 14396 redis    6u  IPv4  67757      0t0  TCP localhost:redis (LISTEN)
redis-ser 14396 redis    7u  IPv6  67758      0t0  TCP ip6-localhost:redis (LISTEN)
redis-ser 14396 redis    8u  IPv4  67759      0t0  TCP server:redis (LISTEN)

% redis-cli -h 192.168.1.200
192.168.1.200:6379>

在引导过程中,什么会阻止服务绑定到公共IP地址?这与桌面安装有关吗?谢谢你提前给你时间!

EN

回答 2

Ask Ubuntu用户

回答已采纳

发布于 2023-04-06 21:21:31

谢谢每一个发表建议的人。它支持了我的直觉,当服务开始时,网络还没有准备好。我得以证实:

  • Ubuntu22.04桌面虚拟机的超级干净安装也有同样的问题(服务在重新启动时没有绑定到公共IP,只有回送地址)。
  • Ubuntu22.04Server的干净安装如预期一样工作(服务开始监听给定的IP地址)。
  • 看来服务器和桌面的启动方式不同。也许网络是在GUI桌面之后/内部配置的?
  • 有关systemd的这个链接有更多的深度信息:https://unix.stackexchange.com/questions/126009/cause-a-script-to-execute-after-networking-has-started#126146
  • 上面的链接提到了使用通配符地址(*或0.0.0.0)绑定,而不是字面上的公共静态IP。这行得通!如果您有多个网络接口,though...but,那么您可能不会在这种情况下使用桌面。
  • 一个完整的解决方案将涉及学习系统和调试启动。
票数 0
EN

Ask Ubuntu用户

发布于 2023-04-06 07:01:43

服务可能会在网络接口完全准备好并配置好之前启动,从而使服务只与localhost绑定,而不是您想要的IP。

您可以在服务启动之前检查它是否已完全就绪和配置,首先将systemd服务文件配置为依赖于正在运行的网络,方法是将该行添加到[Unit]After=network-online.target中。您还可以修改/etc/systemd/resolved.conf以包括静态IP地址,例如

代码语言:javascript
复制
DNS=192.168.1.1
Domains=example.com

您还可以使用传统的网络配置方法,编辑/etc/NetworkManager/NetworkManager.conf并设置managed=false,然后在/etc/ set /interfaces文件中配置网络接口。同样,在systemd服务文件中,您可以通过以下方式延迟服务的启动:

代码语言:javascript
复制
ExecStartPre=/bin/sleep 30
ExecStart=/usr/bin/postgresql
票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1462475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档