标签: linux-networking

如何在linux中设置两条默认路由

TL; 博士

如何在linux中设置两条默认路由(对应两个接口),使得来自两个接口的传入流量都被接受。

设想

我有一个主机有两个 NICeth0eth1. 它连接到两个网络,例如:

  • 开发: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)

networking linux routing linux-networking

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

将 3 个 1G NIC 绑定到一个 3G NIC 中吗?

例如,我有 3 个网卡 (1GB) 并制作了一个绑定网卡。我可以获得 3GB 网卡吗?

我应该将这 3 个 NIC 连接到 1 个交换机吗?如果一个 NIC 死机,服务器和交换机之间的网络是否仍然存在?

或者我应该将每个 NIC 连接到 3 个不同的交换机?因此,如果一个 NIC 或一台交换机死机,我的网络仍然存在吗?

我应该使用哪种模式?

networking linux switch bonding linux-networking

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

Linux下IPv6的TCP拥塞控制

我可以打字

echo bbr > /proc/sys/net/ipv4/tcp_congestion_control
Run Code Online (Sandbox Code Playgroud)

更改在 IPv4 上运行的 TCP 连接的拥塞控制算法,但是对于那些通过 IPv6 到达的连接,我该如何做呢?

上面的命令是否为两者都设置了它?

linux ipv6 tcp linux-networking bbr

6
推荐指数
2
解决办法
2303
查看次数

How to add a static secondary IP to a DHCP interface using netplan?

我的服务器有一个文件 /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)

dhcp static-ip linux-networking netplan

6
推荐指数
2
解决办法
9419
查看次数

Docker 主机的正确 iptables 规则是什么?

我有带 Docker 的 Ubuntu 服务器来为 MySQL 和 SSH/SFTP 提供服务,我需要对除330622之外的所有端口进行防火墙设置,这是非常标准和微不足道的要求,对吧?

现在,我设法找到了一种解决方案,但在应用它之后,它对我来说并不完全有效,要么:

  1. 我无法访问任何提到的服务(默认情况下)
  2. 我无法从容器内访问互联网(如果我放入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 预路由?)。有什么建议?万分感谢!

linux iptables linux-networking docker docker-compose

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

无法创建嵌套的网络命名空间

似乎无法从网络名称空间创建网络名称空间。它导致“错误:对等网络引用无效。”。

这是一个错误还是有某种我不知道的限制?

以下是我对错误的 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)

linux ip namespaces linux-networking network-namespace

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

是否可以仅使用 shell 侦听 TCP 端口,而无需其他工具?

我需要一个带有 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)

networking shell tcp linux-networking shell-scripting

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

Linux 如何在进程间分配带宽?

如果我不设置任何流量整形,Linux 如何在进程之间分配(传出)带宽?

我的具体情况是我在一个云 VM 上运行 30 个相同的进程,每个进程基本上都尽可能快地通过网络 (TCP) 发送数据。它们一起似乎达到了我期望的总输出带宽。然而,有些进程比其他进程完成得更快,并且消耗更多的带宽(高达 3 倍)。快速进程完成后,其余进程会加快速度并使用更多带宽。

Linux 如何决定每个进程应该获得多少带宽?

linux tcp linux-networking

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

systemd 的“可预测接口名称”不可预测

我在 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 都无法识别卡或连接的设备,但内核可以识别,并且网络连接工作正常。为什么?)

networking debian linux-networking systemd

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

10G 网络上的写入速度非常慢(NVME 驱动器)

搭建实验实验室集群,通过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)

optimization fiber 10gbethernet linux-networking nvme

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