如何在linux中设置两条默认路由(对应两个接口),使得来自两个接口的传入流量都被接受。
我有一个主机有两个 NICeth0和eth1. 它连接到两个网络,例如:
开发:eth0,IP 1.1.1.4:,网络掩码:255.255.255.0,网关:1.1.1.1
开发:eth1,IP 2.2.2.4:,网络掩码:255.255.255.0,网关:2.2.2.1
(两个网络都连接到互联网。)
路线为(ip route show):
default via 1.1.1.1 dev eth0 metric 1
default via 2.2.2.1 dev eth1 metric 2
1.1.1.0/24 dev eth0 src 1.1.1.4
2.2.2.0/24 dev eth1 src 2.2.2.4
Run Code Online (Sandbox Code Playgroud)
(较低的指标意味着较高的优先级。)
现在,当有人2.2.2.4从某个外部主机(比如4.4.4.4)ping 通时,没有回复。
tcpdump -i eth1在我的主机上的输出是:
22:41:27.431539 IP 4.4.4.4 > 2.2.2.4: ICMP echo request, id 8625, seq 4, …Run Code Online (Sandbox Code Playgroud) 例如,我有 3 个网卡 (1GB) 并制作了一个绑定网卡。我可以获得 3GB 网卡吗?
我应该将这 3 个 NIC 连接到 1 个交换机吗?如果一个 NIC 死机,服务器和交换机之间的网络是否仍然存在?
或者我应该将每个 NIC 连接到 3 个不同的交换机?因此,如果一个 NIC 或一台交换机死机,我的网络仍然存在吗?
我应该使用哪种模式?
我可以打字
echo bbr > /proc/sys/net/ipv4/tcp_congestion_control
Run Code Online (Sandbox Code Playgroud)
更改在 IPv4 上运行的 TCP 连接的拥塞控制算法,但是对于那些通过 IPv6 到达的连接,我该如何做呢?
上面的命令是否为两者都设置了它?
我的服务器有一个文件 /etc/netplan/50-cloud-init.yaml ,内容如下:
# This file is generated from information provided by
# the datasource. Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
version: 2
ethernets:
ens3:
dhcp4: true
match:
macaddress: fa:**:**:**:**:**
set-name: ens3
Run Code Online (Sandbox Code Playgroud)
这导致以下接口配置:
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc fq_codel state UP group default qlen 1000
link/ether fa:**:**:**:**:** brd ff:ff:ff:ff:ff:ff
inet 10.0.0.5/24 brd 10.0.0.255 scope global dynamic …Run Code Online (Sandbox Code Playgroud) 我有带 Docker 的 Ubuntu 服务器来为 MySQL 和 SSH/SFTP 提供服务,我需要对除3306和22之外的所有端口进行防火墙设置,这是非常标准和微不足道的要求,对吧?
现在,我设法找到了一种解决方案,但在应用它之后,它对我来说并不完全有效,要么:
iptables: falseDocker 的daemon.json配置文件)我尝试了许多其他搜索结果,但它们大多非常复杂,以至于我不明白他们在做什么,或者他们编写了大量脚本,这让我成为一个 iptables 外行,从它那里获取一些东西是一项不可能完成的任务。
提议的解决方案看起来相当简单且易于理解,但整个 Docker 网络的复杂性使得调试变得更加困难。
有人可以分享他们针对 Docker 主机的工作 iptables 规则或至少指导我正确的方向吗?
我使用 docker-compose 来启动服务,这是我的 yaml:
version: '3.7'
services:
mysql:
container_name: 'mysql'
image: mysql:8.0.13
command: --default-authentication-plugin=mysql_native_password
user: 1000:1000
ports:
- "3306:3306"
volumes:
- ./data:/var/lib/mysql
- ./config/custom.cnf:/etc/mysql/conf.d/custom.cnf
networks:
- database
restart: always
networks:
database:
driver: bridge
Run Code Online (Sandbox Code Playgroud)
编辑: 我发现允许 Docker 管理 iptables 规则是推荐的并且要求不高,至少从长远来看是可以的,即使我没有以我喜欢的方式打开所需的端口,它仍然可以有效的。此时我想要的是找出是否可以使用 iptables 来阻止 Docker 打开的端口以及如何(通过 mangle 预路由?)。有什么建议?万分感谢!
似乎无法从网络名称空间创建网络名称空间。它导致“错误:对等网络引用无效。”。
这是一个错误还是有某种我不知道的限制?
以下是我对错误的 cmd 跟踪。
# ip netns add foo1
# ip netns exec foo1 ip netns add foo2
# ip netns
Error: Peer netns reference is invalid.
Error: Peer netns reference is invalid.
foo2
foo1
# ip netns exec foo2 /bin/bash
setting the network namespace "foo2" failed: Invalid argument
Run Code Online (Sandbox Code Playgroud) 我需要一个带有 MISP 处理器的非常小的嵌入式系统上的非常简单的 Web 服务器。我认为最简单的服务器可能是一个监听 TCP 端口的 shell 脚本。
问题是系统甚至没有perl。只有一些基本的外壳/bin/sh。我在网上搜索了“如何从 shell 侦听端口”,但我发现的答案都提到了其他一些工具,例如nc,我没有。
甚至有可能做到吗?
系统,它是一个路由器,安装了 busybox 和/bin目录中的其他一些二进制文件,它们是:
#ls /bin
chown df fatattr gzip login mount
ping rm shuf touch usleep
busybox comgt dmesg fgrep hostname ls
mv ping6 rmdir sleep true vi
busybox-new cp echo flock ip mkdir
netstat printf sdparm split umount watch
cat date egrep grep kill mknod
nice ps sed sync uname wget
chmod dd false gunzip ln more
pidof pwd sh …Run Code Online (Sandbox Code Playgroud) 如果我不设置任何流量整形,Linux 如何在进程之间分配(传出)带宽?
我的具体情况是我在一个云 VM 上运行 30 个相同的进程,每个进程基本上都尽可能快地通过网络 (TCP) 发送数据。它们一起似乎达到了我期望的总输出带宽。然而,有些进程比其他进程完成得更快,并且消耗更多的带宽(高达 3 倍)。快速进程完成后,其余进程会加快速度并使用更多带宽。
Linux 如何决定每个进程应该获得多少带宽?
我在 Mac Pro 上作为 NAS/VM 主机运行 Debian 测试(内核 5.10.0-2-amd64/systemd 247.2-5)。今天,我添加了一个 Thunderbolt 3 卡(技嘉 Titan Ridge) - 并注意到了一些奇怪的事情:Mac 内置以太网端口(enp9s0 / enp10s0)的网络标识符更改为 enp14s0/enp15s0,具体取决于我的 iMac 是否已连接并开启在启动时通过 Thunderbolt。
这是什么原因造成的?我认为“新”命名方案优于旧“ethX”的优势在于设备名称是可预测的。这尤其令人讨厌,因为我必须在 GRUB 命令行中对接口名称进行硬编码,以便预引导 DHCP 工作,以便我可以解锁加密的根磁盘,而且我还需要用于桥接配置的稳定接口名称。
(另外:boltctl 和 tbtadm 都无法识别卡或连接的设备,但内核可以识别,并且网络连接工作正常。为什么?)
搭建实验实验室集群,通过10G光纤连接接收数据的写入速度为本地写入速度的10%。
测试两台相同机器之间的传输速度;iperf3显示良好的内存到内存速度为9.43Gbits/s。磁盘(读取)到内存传输的速度(9.35Gbit/s):
test@rbox1:~$ iperf3 -s -B 10.0.0.21
test@rbox3:~$ iperf3 -c 10.0.0.21 -F /mnt/k8s/test.3g
Connecting to host 10.0.0.21, port 5201
Sent 9.00 GByte / 9.00 GByte (100%) of /mnt/k8s/test.3g
[ 5] 0.00-8.26 sec 9.00 GBytes 9.35 Gbits/sec
Run Code Online (Sandbox Code Playgroud)
但是发送超过 10G 的数据并写入另一台机器上的磁盘要慢一个数量级:
test@rbox1:~$ iperf3 -s 10.0.0.21 -F /tmp/foo -B 10.0.0.21
test@rbox3:~$ iperf3 -c 10.0.0.21
Connecting to host 10.0.0.21, port 5201
[ 5] local 10.0.0.23 port …Run Code Online (Sandbox Code Playgroud) linux-networking ×10
linux ×6
networking ×4
tcp ×3
10gbethernet ×1
bbr ×1
bonding ×1
debian ×1
dhcp ×1
docker ×1
fiber ×1
ip ×1
iptables ×1
ipv6 ×1
namespaces ×1
netplan ×1
nvme ×1
optimization ×1
routing ×1
shell ×1
static-ip ×1
switch ×1
systemd ×1