AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1097088
Accepted
kriomant
kriomant
Asked: 2022-03-27 03:57:23 +0800 CST2022-03-27 03:57:23 +0800 CST 2022-03-27 03:57:23 +0800 CST

为什么流量会在不同的 veth 设备之间路由?

  • 772

我有一个问题:虚拟网络设备之间存在意外的路由路径。

让我们创建两个独立的 veth-peer 设备对:

$ sudo ip link add veth0 type veth peer name peer0
$ sudo ip link add veth1 type veth peer name peer1

为 peerX 设备分配地址:

$ sudo ip addr add ab:: dev peer0
$ sudo ip addr add cd:: dev peer1

设置所有设备:

$ sudo ip link set dev veth0 up
$ sudo ip link set dev veth1 up
$ sudo ip link set dev peer1 up
$ sudo ip link set dev peer0 up

检查设备:

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 02:82:b2:df:b0:58 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3
       valid_lft 84429sec preferred_lft 84429sec
    inet6 fe80::82:b2ff:fedf:b058/64 scope link
       valid_lft forever preferred_lft forever
3: peer0@veth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 6e:8d:c0:7c:02:9c brd ff:ff:ff:ff:ff:ff
    inet6 ab::/128 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::6c8d:c0ff:fe7c:29c/64 scope link
       valid_lft forever preferred_lft forever
4: veth0@peer0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 4e:43:26:75:10:11 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::4c43:26ff:fe75:1011/64 scope link
       valid_lft forever preferred_lft forever
5: peer1@veth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether ea:8c:82:e6:2e:a9 brd ff:ff:ff:ff:ff:ff
    inet6 cd::/128 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::e88c:82ff:fee6:2ea9/64 scope link
       valid_lft forever preferred_lft forever
6: veth1@peer1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether da:5a:68:b1:e8:43 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::d85a:68ff:feb1:e843/64 scope link
       valid_lft forever preferred_lft forever

和路线:

$ ip r
default via 10.0.2.2 dev enp0s3 proto dhcp src 10.0.2.15 metric 100
10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15
10.0.2.2 dev enp0s3 proto dhcp scope link src 10.0.2.15 metric 100

现在在 UDP 端口 2000 上监听 peer0:

$ nc -u -6 -l ab:: 2000

并通过 peer1 发送数据包:

$ echo -n abc nc -u -6 -s cd:: ab:: 2000

和听nc版画abc!但是为什么?peer0并且peer1没有以任何方式连接。如果我理解正确,收听nc应该绑定到peer0,发送nc应该绑定到peer1.

networking linux-networking virtual-network
  • 1 1 个回答
  • 78 Views

1 个回答

  • Voted
  1. Best Answer
    A.B
    2022-03-27T05:53:30+08:002022-03-27T05:53:30+08:00

    peer0 和 peer1 没有以任何方式连接。

    它们都是属于系统的接口,因此它们连接到系统。路由发生在系统上。系统将直接在属于自己的地址之间进行通信,无需将数据包路由到外部,即不通过 veth 接口发送数据包,而是使用其环回接口(dev lo如下):

    # ip route get from cd:: to ab::
    local ab:: from cd:: dev lo table local proto kernel src ab:: metric 0 pref medium
    

    此外,这并不是说它在这里有多大帮助,但是当显示没有任何 IPv6 值来提示 IPv6 的路由时,-6必须给出,或者它默认为 IPv4。

    # ip -6 route
    ab:: dev peer0 proto kernel metric 256 pref medium
    cd:: dev peer1 proto kernel metric 256 pref medium
    fe80::/64 dev peer1 proto kernel metric 256 pref medium
    fe80::/64 dev veth1 proto kernel metric 256 pref medium
    fe80::/64 dev peer0 proto kernel metric 256 pref medium
    fe80::/64 dev veth0 proto kernel metric 256 pref medium
    # ip -6 route show table local
    local ::1 dev lo proto kernel metric 0 pref medium
    local fe80::4c43:26ff:fe75:1011 dev veth0 proto kernel metric 0 pref medium
    local fe80::6c8d:c0ff:fe7c:29c dev peer0 proto kernel metric 0 pref medium
    local fe80::d85a:68ff:feb1:e843 dev veth1 proto kernel metric 0 pref medium
    local fe80::e88c:82ff:fee6:2ea9 dev peer1 proto kernel metric 0 pref medium
    multicast ff00::/8 dev veth1 proto kernel metric 256 pref medium
    multicast ff00::/8 dev peer1 proto kernel metric 256 pref medium
    multicast ff00::/8 dev veth0 proto kernel metric 256 pref medium
    multicast ff00::/8 dev peer0 proto kernel metric 256 pref medium
    
    • 1

相关问题

  • 谁能指出我的 802.11n 范围扩展器?

  • 我怎样才能得到一个网站的IP地址?

  • 在一个 LAN 中使用两台 DHCP 服务器

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve