小编Mal*_*ous的帖子

systemd-resolved 中的链接“范围”是什么?

当尝试在 Ubuntu 上使用 NetworkManager 的 ModemManager 修复 DNS 问题时,我在systemd-resolve --status连接时的输出中发现了这种差异。(pingip 有效,手动编辑/etc/resolv.conf可以解决问题,设置 FallbackDNS 也可以解决问题,但都有副作用。

工作安装 - PPP 调制解调器(Ubuntu 17.10)

Link 3 (wwp0s20u6)
      Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 198.142.0.51
                      211.29.132.12
Run Code Online (Sandbox Code Playgroud)

安装损坏 - PPP 调制解调器(相同硬件 - Lubuntu 17.04)

Link 2 (wwp0s20u6)
      Current Scopes: LLMNR/IPv4 LLMNR/IPv6
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
Run Code Online (Sandbox Code Playgroud)

它们都是 Ubuntu 的版本,并且硬件相同。中的网络连接配置/etc/NetworkManager/system-connections …

dns systemd-networkd systemd-resolved

7
推荐指数
1
解决办法
6672
查看次数

如何让 systemd-resolved 停止尝试使用离线 DNS 服务器?

我已将我的 DHCP 服务器配置为提供两个名称服务器以实现冗余,因此如果其中一个处于离线状态,则可以使用另一个。

我已经配置了我的电脑,systemd-resolved并根据resolvectl status它已经选择了所有的 DNS 服务器(两者的 IPv4 和 IPv6 地址),并使用一个作为当前的服务器。

但是,如果 DNS 服务器脱机,systemd-resolved则不会切换到下一个服务器,而是继续尝试连接到脱机的服务器,从而导致所有未缓存的名称解析失败。

如果我运行systemctl restart systemd-resolved,它将切换到另一台服务器并继续工作,但它会在一段时间后随机切换回离线服务器并且名称解析将再次失败。

我如何才能systemd-resolved停止使用离线 DNS 服务器并快速切换到它知道的其他服务器之一?

journalctl 仅在切换到使用离线服务器时才显示:

systemd-resolved[1985]: Using degraded feature set (UDP) for DNS server fdxx::x.
systemd-resolved[1985]: Using degraded feature set (TCP) for DNS server fdxx::x.
Run Code Online (Sandbox Code Playgroud)

发生这种情况时,有问题的服务器完全脱机,并且不响应 ping。

dns redundancy systemd-resolved

7
推荐指数
2
解决办法
1万
查看次数

如何从 systemd-resolved 中删除错误的 DNS 服务器 IP?

所以我正在测试一个路由器,它向我网络上的所有机器添加了一些随机的 IPv6 地址,包括我的 DNS 服务器。不知何故,这些 IP 作为有效的 DNS 服务器被广播(不确定只有真正的路由器如何发送 IPv6 RA 数据包)但长话短说,现在我所有的机器都向一个不存在的 IP 地址发送 DNS 查询。

如果我重新启动resolvedsystemctl restart systemd-resolved那么resolvectl仍然将这些虚假 IP 显示为有效的名称服务器。

它们被列在/etc/resolv.conf所以如果我在那里删除它们并重新启动systemd-resolved它只会再次添加虚假的 IP。

如果我查看日志,journalctl --unit=systemd-resolved它会告诉我虚假 IP 正在“降级功能模式”下运行,但没有告诉我从哪里找到这些 IP。

它从哪里获取这些错误的 IP 地址?是否有一些缓存文件我需要删除才能让它回到仅使用 IPv6 路由器广告提供的 IP?

ipv6 systemd-resolved

7
推荐指数
1
解决办法
7272
查看次数

这个 IPv6 地址来自哪里?

TL;DR:是否有命令显示每个 IPv6 地址分配给给定 NIC 的原因?例如,显示哪个路由器通告了该前缀。

细节

我已将我的网络设置为使用带有 ULA 前缀的 IPv6 地址fdaa::/64。这有效,我有这样的地址:

$ ip addr show dev enp0s25
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether b8:ae:ed:72:7d:5f brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.16/24 brd 192.168.0.255 scope global enp0s25
       valid_lft forever preferred_lft forever
    inet6 fdaa::6666:b3ff:0:d1a/128 scope global noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 2001:4479:7caa:9372:baae:edff:fe72:7d5f/64 scope global mngtmpaddr noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fdaa::baae:edff:fe72:7d5f/64 scope global mngtmpaddr noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::baae:edff:fe72:7d5f/64 scope …
Run Code Online (Sandbox Code Playgroud)

routing ipv6 iproute

6
推荐指数
1
解决办法
8391
查看次数

休眠到交换分区而不将其用作实际交换空间

多年来,我在没有交换的情况下设置我的 Linux 机器,因为它们有足够的内存来完成我需要的事情,我宁愿一个进程在使用太多内存时被杀死,而不是变得越来越大并悄悄地减慢一切。

然而,我发现我需要交换才能在笔记本电脑上使用休眠功能,因此我创建了一个交换分区,并且休眠功能一直工作正常。

最近我发现机器进入待机状态而不是休眠状态,经过调查发现交换分区中没有足够的空间来进行休眠。这是因为我认为保留用于休眠的交换分区实际上被用作普通交换空间。

有什么方法可以告诉 Linux 仅将给定的交换分区用于休眠,而不是在正常操作期间使用它进行交换?

编辑:根据下面的问题,机器有 8GB 内存,交换分区也是 8GB,因为我只想将其用于休眠使用而不是实际交换使用,因此任何大于机器内存大小的都会被浪费。根本问题是,由于 8GB 交换分区被用作额外内存,因此机器现在最多可以分配 16GB 内存(8GB 物理 + 8GB 交换)。它最近使用了 10GB,当然无法休眠,因为 10GB 无法放入 8GB 交换分区。

swap hibernate systemd out-of-memory

6
推荐指数
1
解决办法
3713
查看次数

xkb:为功能键分配新的换档级别

我正在尝试更多地利用我的功能键。我想物理F1F12键显示为F21F32,所以我可以分配功能来F21在我的窗口管理器等(如开关,每当我按活动聊天窗口F22。)

但是我仍然想要访问普通功能键,所以我希望能够按住物理Caps Lock键并按下F1以生成F1按键。就其他修饰符而言,如果它们保持不变就好了,所以Shift+F1产生Shift + F1(not Shift + F21)。总之:

  • F1 -> F21
  • Caps+ F1->F1
  • Shift+ F1-> Shift + F1(不变)
  • Alt+ F1-> Alt + F1(不变)
  • 等等。

所以只有前两个点需要更改默认布局。

我尝试使用以下 XKB 片段开始此操作,虽然它生成F21for F1,但在按住时不会生成原始 F 键Caps Lock

partial
xkb_types "hyper" {
    virtual_modifiers Alt,Hyper;
    type "HYPER" { …
Run Code Online (Sandbox Code Playgroud)

xorg xkb keyboard-layout

5
推荐指数
1
解决办法
2491
查看次数

xkb:使用按键更改换档级别而不显示为修饰符

我想将 XKB 配置为Caps Lock用作生成不同键的一种方式,但我不希望它显示为修饰符。例如:

  • F1产生F21按键
  • Caps Lock+F1产生F1按键(即没有修饰符)
  • Shift+ Caps Lock+F1产生Shift + F1按键(仅Shift计数作为改性剂)

我通过分配Caps Lockto部分成功了这一点Hyper_R,但问题是这仅在Hyper_R也设置为修饰符时才有效,例如Mod3. 这意味着Shift+ Caps Lock+F1实际上产生Shift + Mod3 + F1如此监听任何热键Shift + F1,因为他们不喜欢没有工作的Mod3存在。

有什么方法可以Caps Lock用来更改某些键的行为,而实际上不会将其作为修饰键出现在 X 应用程序中?

我读过的文档暗示这可以通过高级 XKB 配置实现,但我找不到任何详细信息。

xorg xkb keyboard-layout

5
推荐指数
1
解决办法
860
查看次数

忽略短暂的鼠标点击/释放

我鼠标中的开关触点坏了,与其再次打开并清洁它们或尝试寻找替换开关(或购买新鼠标),我想通过软件解决这个问题。

有没有一种方法可以告诉 Linux 输入系统观察鼠标按钮的当前状态,并且仅在过去几毫秒的平均值达到一个极端时才发送按下/释放事件?

这样,当按住鼠标按钮时,来自故障开关的非常短的“按钮释放”脉冲将被忽略,因此我可以毫无问题地拖放。同样,单击一次应该足够慢,不会被处理为双击。

我会对 udev/evdev 或 Xorg 解决方案感到满意,因为作为鼠标,它只需要在 Xorg 中工作。

xorg input mouse

5
推荐指数
0
解决办法
358
查看次数

如何使用 systemd-run 限制 CPU 使用

我有一个有缺陷的程序,即使在空闲时也使用 100% CPU。由于目前修复它并不实际,我想将其限制为能够使用不超过 10% 的 CPU。然而,无论我做什么,该进程总是会 100% 占用一个 CPU。

我在Arch Wiki上找到了说明,告诉我创建一个包含以下内容的文件:

# cpulimit.slice
[Slice]
CPUQuota=10%
Run Code Online (Sandbox Code Playgroud)

显然我可以使用这些限制启动 shell,如下所示:

systemd-run --slice=cpulimit.slice --uid=myuser --shell
Run Code Online (Sandbox Code Playgroud)

这似乎有效,输入 sudo 密码后,我得到一个 shell,因此我运行一个简单的测试,该测试将使用 100% CPU,我可以使用 Ctrl+C 停止:

while true; do true; done
Run Code Online (Sandbox Code Playgroud)

我预计它使用的 CPU 不会超过 10%,因为它在切片内运行,但它始终使用 100% CPU!

我究竟做错了什么?

systemd cgroups cpulimit systemd-run

5
推荐指数
1
解决办法
3219
查看次数

如何设置首选 IPv6 接口

我有一个通过 IPv6 发送多播流量的程序。它将流量发送出默认网络接口。它正常工作正常(流量消失eth0),但是如果我加载了 Docker,那么它会从docker0接口发送流量eth0,而不是在网络上不再看到流量。

一个例子是,如果我运行该命令,并且在运行时我使用as或 asping ff05::1检查接口,那么数据包并不总是按预期离开。tcpdump -n host ff05::1 -i XXXXXXeth0docker0eth0

现在我可以通过检查我正在使用的每个程序并指定要绑定的接口(例如使用-I上面的 ping 选项)来解决这个问题,但是这是有问题的,因为我想在多台计算机上共享相同的配置文件,但我必须为每个地址设置不同的 IPv6 地址和接口名称,并记住在动态 IP 地址发生变化时更新它们。

相反,我想了解Linux在绑定到套接字时如何选择要使用的接口,希望我可以在每台机器上手动设置首选接口。然后我正在使用的程序将在正确的接口上发送和接收其多播流量,而不需要任何特殊配置。

我尝试过添加网络路由 ( ip -6 route add ff05::/16 dev eth0) 但这没有任何区别。问题似乎是 Linux 选择一个要绑定的接口(在路由发生之前),然后使用该接口的 IP 地址作为传出数据包的源地址,将其锁定到该接口,而不管路由规则如何。

那么,以ping上面的命令为例,默认的出接口是如何选择的(当-I不使用时)以及如何更改它呢?

routing ipv6 multicast

4
推荐指数
1
解决办法
1832
查看次数

为什么 SSH 会在其他流量不受影响的情况下冻结几分钟?

我注意到当我通过慢速链接通过 SSH 连接到远程机器时,在传输了相对大量的数据后,SSH 似乎“粘住”了。

例如,在链接上输入文本没问题,但运行ls /etc会冻结连接几分钟。

我会理解延迟是否是因为我最大化了连接速度并且在传输数据后它恢复正常,但是连接冻结的时间比您预期的实际涉及的数据量要长得多。

奇怪的是,如果我打开两个进出同一台机器的 SSH 连接,当其中一个冻结时,另一个仍然可以正常工作。所以我不能最大化连接速度,否则它们会同时冻结。

任何一个盒子或(据我所知)之间的路由器都没有活动的流量整形,因此不应该丢弃任何数据包以将平均传输速度保持在一定范围内。

任何人都可以提出任何可能导致这种行为的建议,或者任何需要进一步检查的内容?

scp和发生了同样的事情sshfsscp报告了一个巨大的传输速率(许多 MB/秒,然后速度慢慢回落到stalled几分钟,然后如果我幸运的话它会重复直到文件完成传输。) sshfs工作但通常(并非总是)在保存文件后,挂载点会在几分钟内无响应,从而暂时阻止任何尝试访问它的程序。

编辑:我尝试使用iperf并获得一些有趣的统计数据:

Local:  0.0- 0.9 sec   256 KBytes  2.25 Mbits/sec
Remote: 0.0- 7.0 sec   256 KBytes   302 Kbits/sec

Local:  0.0-15.9 sec  1.00 MBytes   529 Kbits/sec
Remote: 0.0-16.0 sec  1.00 MBytes   524 Kbits/sec
Run Code Online (Sandbox Code Playgroud)

看起来低于一定数量的数据,本地端可以比远程接收快得多。我想这毕竟不是 SSH 问题。我将调查一些可能会对此进行调整的 TCP 设置,但如果有人确实知道,请提供建议!

ssh latency

3
推荐指数
1
解决办法
2451
查看次数