... 以补偿我们无法控制的损坏的 DNS 服务器。
我们的问题:我们部署了嵌入式设备,这些设备在各个站点(主要是仅支持 IPv4 的站点)收集传感器数据。一些站点的网络维护不善,例如错误配置或以其他方式损坏的 DNS 缓存和/或防火墙,它们要么完全忽略 AAAA 查询,要么以损坏的回复(例如错误的源 IP!)响应它们。作为设施部门的外部供应商,我们对(有时是不情愿的)IT 部门几乎没有影响。他们很快修复 DNS 服务器/防火墙的机会微乎其微。
对我们设备的影响是,对于每个 gethostbyname(),进程必须等到 AAAA 查询超时,此时某些进程已经完全超时了它们的连接尝试。
我正在寻找解决方案...
最明显的解决方案是配置解析器库,例如通过 /etc/{ resolv , nsswitch , gai }.conf 不查询 AAAA 记录。中resolv.conf选项no-inet6建议作为这里会正是我所期待的。不幸的是,它没有实现,至少在我们的系统上没有实现(Debian 7 上的 libc6-2.13-38+deb7u4;Ubuntu 14.04 上的 libc6-2.19-0ubuntu6.3)
那怎么办呢?有人发现在 SF 和其他地方建议使用以下方法,但它们都不起作用:
sysctl -w net.ipv6.conf.all.disable_ipv6=1. (出于好奇:为什么解析器要求禁用 IPv6 的 AAAA?)options inet6从 /etc/resolv.conf 中删除。它一开始并不存在,inet6现在只是默认启用。options …昨天的 CVE-2015-7547 使我想到了一个问题,我是否必须在安装 glibc 更新后重新启动所有链接到 glibc 的应用程序和服务?
或者更一般地说,在安全性方面,是否建议在此库收到安全更新时使用该库重新启动所有应用程序或服务?或者重新启动整个计算机可能更好?
我在 CentOS 机器上尝试了一个 python 应用程序,它给了我以下错误:
ImportError: /usr/lib64/libc.so.6: version `GLIBC_2.18' not found (required by /tmp/_MEI2BYIr4/libstdc++.so.6)
Run Code Online (Sandbox Code Playgroud)
我一直想升级 GLIBC,但是在阅读了一些论坛之后,我似乎可以破坏系统。你知道有什么替代方案吗?
谢谢
CentOS 附带 libxml2-2.6.26。我必须至少安装 2.7.X 版本。
我从 XMLSOFT ( http://xmlsoft.org/sources/ )下载了 libxml2、libxml2-devel 和 libxml2-python (2.7.8) 的 RPM 。
我正在尝试以这种方式安装它:
# yum localinstall libxml2-2.7.8-1.x86_64.rpm libxml2-devel-2.7.8-1.x86_64.rpm libxml2-python-2.7.8-1.x86_64.rpm
Run Code Online (Sandbox Code Playgroud)
我得到:
Examining libxml2-devel-2.7.8-1.x86_64.rpm: libxml2-devel-2.7.8-1.x86_64
Marking libxml2-devel-2.7.8-1.x86_64.rpm as an update to libxml2-devel-2.6.26-2.1.2.8.el5_5.1.x86_64
Examining libxml2-python-2.7.8-1.x86_64.rpm: libxml2-python-2.7.8-1.x86_64
Marking libxml2-python-2.7.8-1.x86_64.rpm as an update to libxml2-python-2.6.26-2.1.2.8.el5_5.1.x86_64
Resolving Dependencies
--> Running transaction check
---> Package libxml2.x86_64 0:2.7.8-1 set to be updated
--> Processing Dependency: libc.so.6(GLIBC_2.7)(64bit) for package: libxml2
---> Package libxml2-devel.x86_64 0:2.7.8-1 set to be updated
---> Package libxml2-python.x86_64 0:2.7.8-1 set to …Run Code Online (Sandbox Code Playgroud) 我最近安装了一个软件,我的团队在明年 9 月开始的一个研究项目中需要它。事实证明,该软件在与 glibc 2.12.1 一起使用时存在已知的崩溃错误。我的老板问我们是否可以在应该运行它的服务器上升级 glibc。提示我怀疑的沉默......
在某个时候,我想到了搞乱 glibc 和搞乱饥饿的美洲狮一样好主意。然而,我一直无法确定这种信念的来源。所以,如果我继续这样做:
问题与目标
我们没有从我们的 ISP 获得 IPv6,因此我有一个 IPv6 隧道,它工作正常,但当然不是很快。而且不是很可靠。我喜欢“以防万一”提供 IPv6,但我希望某些主机(域)仅与 IPv4 连接。
默认协议
在我看来,所有应用程序都首先尝试 IPv6;这可能是 glibc 设置。如果这个默认值被反转(对于所有应用程序),我会很好。
网络过滤器
可以使用 Netfilter 阻止 IPv6 地址/网络,但有两个问题:
我只是注意到手册页ip route说的是路由类型unreachable:
本地发件人收到 EHOSTUNREACH 错误。
Netfilter DROP 或 REJECT 是否也会发生同样的情况?此类错误不应导致相关延迟。
DNS过滤
另一种解决方案(如果可能的话,相当简单)是过滤某些域的 AAAA 记录。如果这不是(很容易)可能:是否可以连接 DNS 服务器和 Netfilter,以便我知道“IP 地址 X 属于域 Y”,以便我可以将其添加到 Netfilter?有什么比记录所有内容和 grep 日志更优雅的事情吗?
要走的路?
有哪些(其他)可能性,什么是最简单的?
我正在尝试运行一个需要 glibc 2.7 的程序,但我在 CentOS 5.5 上运行它。有没有办法做到这一点?我无法升级到 CentOS 6。
使用 wget (curl, httplib2) 我总是得到 5 秒的解析超时。当我执行 wget -4 或 wget -6 时,这个问题不会出现。解析也可以使用 dig 或 host。可以使用 /etc/resolv.conf 中的“options timeout:2”降低延迟
这个的 strace 输出是:
15:19:09.908234 uname({sys="Linux", node="openkvk", ...}) = 0
15:19:09.908413 socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 3
15:19:09.908482 connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("212.83.206.202")}, 16) = 0
15:19:09.908569 poll([{fd=3, events=POLLOUT}], 1, 0) = 1 ([{fd=3, revents=POLLOUT}])
15:19:09.908637 sendto(3, "F\347\1\0\0\1\0\0\0\0\0\0\10slashdot\3org\0\0\1\0\1", 30, MSG_NOSIGNAL, NULL, 0) = 30
15:19:09.908735 poll([{fd=3, events=POLLIN|POLLOUT}], 1, 5000) = 1 ([{fd=3, revents=POLLOUT}])
15:19:09.908804 sendto(3, "F\331\1\0\0\1\0\0\0\0\0\0\10slashdot\3org\0\0\34\0\1", 30, MSG_NOSIGNAL, NULL, 0) = 30
15:19:09.908884 poll([{fd=3, …Run Code Online (Sandbox Code Playgroud) 我有一台服务器,由于不同的原因我无法升级。它运行的是 SUSE 11.4。我需要运行一个需要 GLIBC_2.14 的包,我有 GLIB_2.11
我得到的错误是:
/software/AMBER12/amber12/bin/xaLeap: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /software/AMBER12/amber12/bin/xaLeap)
Run Code Online (Sandbox Code Playgroud)
我无法使用包管理器安装库,因为系统太旧,不再支持。至少不再获取更新了。所以,问题是,如果我设法安装丢失的库,我会破坏我的系统吗?既然是libc.so.6的更新,不知道会不会还需要其他依赖的更新?
在 Cent OS 5 上,rpm命令挂在我的 Linux 机器上。
[root@manage glib]# rpm -i libgcc-4.1.1-52.el5.i386.rpm
[root@manage glib]# ps -efww | grep libgcc
root 2020 32168 0 13:50 pts/0 00:00:00 grep libgcc
root 14254 2974 0 13:09 pts/1 00:00:00 rpm -i libgcc-4.1.1-52.el5.i386.rpm
Run Code Online (Sandbox Code Playgroud)
以下是strace:
[root@manage glib]# strace -p 14254
Process 14254 attached - interrupt to quit
select(0, NULL, NULL, NULL, {0, 643179}) = 0 (Timeout)
select(0, NULL, NULL, NULL, {1, 0}) = 0 (Timeout)
select(0, NULL, NULL, NULL, {1, 0}) = …Run Code Online (Sandbox Code Playgroud) SUSE 11 SP4 附带 glibc 版本 2.11.3。对于我的应用程序,我需要高于该版本的 glibc。SUSE 12 附带 glibc 版本 2.19.x。我在我的机器上加载了 SUSE 12 磁盘并找到了 glibc-2.19 rpm。但是当我尝试安装它时会出现以下错误
Preparing... ########################################### [100%]
file /etc/bindresvport.blacklist from install of glibc-2.19-31.9.x86_64 conflicts with file from package glibc-2.11.3-17.84.1.x86_64
file /etc/default/nss from install of glibc-2.19-31.9.x86_64 conflicts with file from package glibc-2.11.3-17.84.1.x86_64
file /etc/gai.conf from install of glibc-2.19-31.9.x86_64 conflicts with file from package glibc-2.11.3-17.84.1.x86_64
file /etc/ld.so.conf from install of glibc-2.19-31.9.x86_64 conflicts with file from package glibc-2.11.3-17.84.1.x86_64
file /etc/rpc from install of glibc-2.19-31.9.x86_64 conflicts with file from package …Run Code Online (Sandbox Code Playgroud)