我在 SUSE Linux Enterprise Server 12 SP1 中遇到了 Docker 的奇怪情况。
我使用 SSH 连接到服务器。首先,我尝试运行一个简单的 nginx 服务器来测试:
docker run -d -p 8081:80 nginx:alpine --name nginxtest
Run Code Online (Sandbox Code Playgroud)
容器启动成功。然后,跑步curl http://localhost:8081就可以了!
<!-- [...] -->
<title>Welcome to nginx!</title>
<!-- [...] -->
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试从我的计算机上的浏览器访问它时,http://10.etc.etc.etc:8081请求超时。
但令人惊讶的是,如果我暂时忘记 docker,并直接从服务器使用简单的 HTTP 服务器,例如python3 -m http.server,我会得到:
Serving HTTP on 0.0.0.0 port 8000 ...
Run Code Online (Sandbox Code Playgroud)
当我从计算机上的浏览器访问它时,http://10.etc.etc.etc:8000它就可以工作了!
所以这一定是关于 docker 如何公开其端口的,但这很奇怪,因为它curl http://localhost:8081有效......
我该如何进一步排除故障并解决此问题?
注意:直到昨天我跑步时一切都运行良好systemctl restart wicked(我试图调查另一个不相关的问题)。我也尝试重新启动服务器,但没有帮助。
这是一些可能相关的更多输出......
ifconfig docker0docker0 Link encap:Ethernet HWaddr 02:49:68:4D:40:9B
inet addr:172.17.0.1 …Run Code Online (Sandbox Code Playgroud) 我们现在有 2013 年,我认为在我的服务器上激活 IPv6 早就应该了。但不幸的是,我遇到了一些问题。老实说,我对 IPv6 的经验很少,所以我希望你能帮助我解决我的“小”问题。
一个小说明:以下地址被混淆了,这不是我在配置中使用的地址;)
我正在运行 Debian 压缩(Debian 2.6.32-46)并且我从我的提供商那里得到了一个 /64 IPv6 块:2a01:4f8:a0:aaaa::/64
所以我改变了/etc/network/interfaces文件如下(这也是我的供应商推荐的方式):
# Loopback device:
auto lo
iface lo inet loopback
# device: eth0
auto eth0
iface eth0 inet static
address 85.10.xxx.zz
broadcast 85.10.xxx.yy
netmask 255.255.255.224
gateway 85.10.xxx.1
iface eth0 inet6 static
# Main IPv6 Address of the server
address 2a01:4f8:a0:aaaa::2
netmask 64
gateway fe80::1
auto eth0:1
iface eth0:1 inet static
address 85.10.xxxx.uu
netmask 255.255.255.224
# default route to access subnet
up route …Run Code Online (Sandbox Code Playgroud) 我在 CentOS 6.6 机器上运行 Bind 9.10.2 版本。在运行 dig 命令时,我收到“net.c:577: sendmsg() failed: Operation not permitted"通知。
dig 实用程序正在给我一个答案,但在顶部,它显示了此通知。
$dig nkn.in +short
**net.c:577: sendmsg() failed: Operation not permitted**
164.100.129.98
System Information :-
cat /etc/*-release
CentOS release 6.6 (Final)
LSB_VERSION=base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
CentOS release 6.6 (Final)
CentOS release 6.6 (Final)
Run Code Online (Sandbox Code Playgroud)
有人可以帮我弄清楚为什么我会收到此通知吗?
IPv6 防火墙规则集:-
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:LOGGING - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmpv6 -j ACCEPT
-A INPUT -p udp --dport 5353 …Run Code Online (Sandbox Code Playgroud) Linux 绑定驱动程序是否有一个底层的管理或诊断接口来确定内部发生了什么?
多年来,我一直在 Linux 机器和 Cisco 交换机之间使用链路聚合。在设置 Linux 端根本不响应 Cisco LACP 数据包的新机器时,我会定期遇到死胡同。我对每台服务器都严格遵循一套严格的说明,但结果似乎各不相同。
无论绑定包含一个从属设备还是八个从属设备,tcpdump 都会显示来自所有绑定接口上的交换机的 LACP 数据包,并且没有数据包被传回。事实上,没有数据包是传输周期。 rx_packets为接口显示可观的流量,但tx_packets为零。日志中没有关于 MII 或绑定的有趣内容。甚至没有任何错误。
目前,我正在处理一个只有两个网卡的盒子。目前,我的债券中只有 eth1。显然,这是一个退化的配置。这种情况不会随着 eth0 和 eth1 在债券中而改变;当网络堆栈完全关闭时,它只会使机器更难工作。如有必要,我可以为两个 nic 重新配置它并通过管理界面 (DRAC),但我无法通过这种方式从框中复制粘贴。
一些预习:
这是今天下载的 debian 8.6。
Linux box 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u2
(2016-10-19) x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
一个简写的配置:
iface eth1 inet manual
auto bond0
iface bond0 inet manual
slaves eth1
address 10.10.10.10
netmask 255.255.255.0
bond_mode 4
bond_miimon 100
bond_downdelay 200
bond_updelay 200 …Run Code Online (Sandbox Code Playgroud) 我已禁用网络管理器,并且正在使用 ifcfg- 脚本进行网络配置。我试图找出 DEFROUTE="yes" 和 GATEWAY 选项之间的区别。
我理解“ifcfg 文件按数字升序解析,最后一个要读取的 GATEWAY 指令用于在路由表中组成默认路由。” 根据 RHEL 文档。但是 DEFROUTE 是如何使用的呢?
例如 ifcfg-em1 具有 DEFROUTE="yes" 和指定的 GATEWAY 选项。而 ifcfg-em2 只有 GATEWAY 选项。我看到 ifcfg-em2 GATEWAY 作为默认网关被添加到路由表中。完全有 DEFROUTE 的原因是什么?
谢谢,
最好的问候,
罗马
在 Ubuntu 16.04 中,我编写了一个脚本来根据某些参数动态配置有线以太网接口的 IP 地址。现在的问题是,在我的脚本中,我假设名称是 eth0,但这并不总是正确的。检索它的名字(只是有线的)?
使用ifconfig命令我得到:
enp7s0 Link encap:Ethernet HWaddr fc:3f:db:a2:6d:46
inet addr:192.168.0.101 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::149f:3103:af2f:1ec5/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6784 errors:0 dropped:0 overruns:0 frame:0
TX packets:7493 errors:1 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4565079 (4.5 MB) TX bytes:827825 (827.8 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:8037 errors:0 dropped:0 overruns:0 frame:0
TX packets:8037 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 …Run Code Online (Sandbox Code Playgroud) 我正在尝试Cisco VPN client在 Docker 中运行控制台。我这样启动容器:
docker run -it -v /srv/vpn/keys/:/root/keys/ --network=host --cap-add=NET_ADMIN --device=/dev/net/tun -v /dev/net/tun:/dev/net/tun vpn-vpnc-client_img
Run Code Online (Sandbox Code Playgroud)
然后vpnc在 Docker 容器内运行客户端
vpnc-connect /root/keys/vpnc.conf --local-port 0
Run Code Online (Sandbox Code Playgroud)
它产生以下输出:
Cannot open "/proc/sys/net/ipv4/route/flush": Read-only file system
Cannot open "/proc/sys/net/ipv4/route/flush": Read-only file system
Cannot open "/proc/sys/net/ipv4/route/flush": Read-only file system
Cannot open "/proc/sys/net/ipv4/route/flush": Read-only file system
Cannot open "/proc/sys/net/ipv4/route/flush": Read-only file system
Cannot open "/proc/sys/net/ipv4/route/flush": Read-only file system
Cannot open "/proc/sys/net/ipv4/route/flush": Read-only file system
Cannot open "/proc/sys/net/ipv4/route/flush": Read-only file system
Cannot open "/proc/sys/net/ipv4/route/flush": Read-only …Run Code Online (Sandbox Code Playgroud) 我有几个 CentOS 6/7 系统(非生产、实验用途)已配置为使用 DHCP 作为其 IP 地址。上周发生了一次严重的网络中断,我发现这些系统丢失了 IP 地址并且 DHCP 客户端已终止。我想经过太多/太长时间的重试。
让它尝试永远恢复的正确方法是什么?是否有可以执行此操作的 dhcp 客户端设置?或者我应该添加一个 cron 条目,它每小时执行一次“ifup eth0”之类的操作?或者有没有更好的方法来做到这一点?
我知道 CentOS 6 和 CentOS 7 做这些事情的方式不同,我正在为这两种情况寻找答案。
更新:
现在我已经创建了这个脚本(我把它放在 /etc/cron.hourly/ 中),它似乎在 CentOS 6 的特定情况下工作。这可能不是最好的解决方案,但它“在我的机器上工作”。
#!/bin/bash
IF=eth0
ifconfig ${IF} | fgrep 'inet addr' > /dev/null
if [ $? -ne 0 ];
then
echo "Network is dead, trying restart"
ifup ${IF}
fi
Run Code Online (Sandbox Code Playgroud)
仍在寻找正确的方法来做到这一点,所以我认为这不是我问题的正确答案。
在典型的 Linux 机器上,您可以通过修改位于 的文件来更改内核配置/proc/*。
例如,对于accept_dad特定网络接口(例如eth0)的 IPv6 参数,您需要修改以下文件:
/proc/sys/net/ipv6/conf/eth0/accept_dad
Run Code Online (Sandbox Code Playgroud)
但是,正如我最近发现的,有一个广泛传播的工具,sysctl它具有相同的目的,并且工作原理如下:
sysctl -w net.ipv6.conf.eth0.accept_dad=1
Run Code Online (Sandbox Code Playgroud)
我的问题是,我们什么时候应该使用哪种工具?我的直觉告诉我,如果您知道自己在做什么,则应该直接写入文件,但是,如果您想要验证而不需要什么,则应该使用sysctl.
由于sysctl是我们可以直接控制的东西的另一层,我认为通过使用它,我们将自己暴露在潜在的错误中,而这些错误是通过直接写入文件来避免的。
我将几个 KVM 虚拟机连接到路由到 1Gbit 物理网络的虚拟网络。路由器使用 netfilter/iptables 来过滤真实和虚拟网络之间的流量。对于虚拟网络交换机,我使用带有 PCI 直通的 SR-IOV。与使用 Linux 桥接器相比,这种设置允许更高的吞吐量(受 PCIe 带宽限制)和更低的 CPU 开销(参考:Toshiaki Makita 在 2014 年 LinuxCon Japan 上的演讲的第 22-23 页。
我已为每个 VM 和 KVM 主机分配了一个 Intel I350 NIC 相同端口的 VF。(每个 I350 端口最多有 7 个 VF,所以 6 个 VM + 主机是这个虚拟网络的最大大小)。除了一个恼人的怪癖外,此设置按预期工作:I350 的嵌入式交换机仅在我使用物理跳线将关联的 I350 物理端口连接到物理外部交换机(所有其他端口都为空)时起作用。打开外部开关后,虚拟网络工作正常;但是当外部交换机断电时,PF 链路状态更改为“NO-CARRIER”并且虚拟网络不再传递数据包。
有谁知道如何让 I350 的嵌入式交换机在物理端口上没有活动链接的情况下正常工作?
如果重要的话,VM 主机运行 Debian 10 (Buster)。
感谢您提供的任何光线!
补充说明:
像Smartronix SuperLooper这样的环回插头不会像外部开关那样笨重,并且可能会起作用。然而,根据制造商的说法,它“仅用于测试可以禁用近端串扰 (NEXT) 功能的系统”——而 I350 数据表并未提及此类功能。
I350 数据表的第 3.7.6 节描述了 …
networking virtualization debian linux-networking kvm-virtualization
linux-networking ×10
linux ×4
networking ×4
docker ×2
routing ×2
bash ×1
bonding ×1
centos6 ×1
centos7 ×1
debian ×1
dhcp ×1
ipv6 ×1
lacp ×1
linux-kernel ×1
permissions ×1
proc ×1
redhat ×1
rhel7 ×1
scripting ×1
sles ×1
sles12 ×1
sysctl ×1
ubuntu ×1
vpn-client ×1