Linux 虚拟网络 IPIP

news/2024/9/30 17:34:40

IPIP

img

  • IPIP隧道是一种点对点的隧道协议,用于在IPv4网络上传输IPv4或IPv6数据包。
  • IPIP隧道的工作原理是将源主机的IP数据包封装在一个新的IP数据包中,新的IP数据包的目的地址是隧道的另一端。在隧道的另一端,接收方将解封装原始IP数据包,并将其传递到目标主机。IPIP隧道可以在不同的网络之间建立连接,例如在IPv4网络和IPv6网络之间建立连接。

一、使用 Containerlab 模拟网络

a | 拓扑

拓扑

b | 网络拓扑文件

# ipip.clab.yml
name: ipip
topology:nodes:gw1:kind: linuximage: vyos/vyos:1.2.8cmd: /sbin/initbinds:- /lib/modules:/lib/modules- ./startup-conf/gw1.cfg:/opt/vyatta/etc/config/config.bootgw2:kind: linuximage: vyos/vyos:1.2.8cmd: /sbin/initbinds:- /lib/modules:/lib/modules- ./startup-conf/gw2.cfg:/opt/vyatta/etc/config/config.bootserver1:kind: linuximage: harbor.dayuan1997.com/devops/nettool:0.9exec:- ip addr add 10.1.5.10/24 dev net0- ip route replace default via 10.1.5.1server2:kind: linuximage: harbor.dayuan1997.com/devops/nettool:0.9exec:- ip addr add 10.1.8.10/24 dev net0- ip route replace default via 10.1.8.1links:- endpoints: ["gw1:eth1", "server1:net0"]- endpoints: ["gw2:eth1", "server2:net0"]- endpoints: ["gw1:eth2", "gw2:eth2"]

c | VyOS 配置文件

  • gw1.cfg
配置文件
# ./startup-conf/gw1.cfg
interfaces {ethernet eth1 {address 10.1.5.1/24duplex autosmp-affinity autospeed auto}ethernet eth2 {address 172.12.1.10/24duplex autosmp-affinity autospeed auto}loopback lo {}tunnel tun0 {# 配置 ipip 设置本端地址,远端地址address 1.1.1.1/24encapsulation ipiplocal-ip 172.12.1.10multicast disableremote-ip 172.12.1.11}
}
protocols {static {# 静态路由,指定到达 10.1.8.0/24 网络的下一条为 1.1.1.2, 1.1.1.2 和 1.1.1.1 组成了 ipiproute 10.1.8.0/24 {next-hop 1.1.1.2 {}}}
}
system {config-management {commit-revisions 100}console {device ttyS0 {speed 9600}}host-name vyoslogin {user vyos {authentication {encrypted-password $6$QxPS.uk6mfo$9QBSo8u1FkH16gMyAVhus6fU3LOzvLR9Z9.82m3tiHFAxTtIkhaZSWssSgzt4v4dGAL8rhVQxTg0oAG9/q11h/plaintext-password ""}level admin}}ntp {server 0.pool.ntp.org {}server 1.pool.ntp.org {}server 2.pool.ntp.org {}}syslog {global {facility all {level info}facility protocols {level debug}}}time-zone UTC
}/* Warning: Do not remove the following line. */
/* === vyatta-config-version: "dns-forwarding@1:mdns@1:ssh@1:webproxy@1:webgui@1:zone-policy@1:broadcast-relay@1:l2tp@1:cluster@1:snmp@1:pppoe-server@2:conntrack@1:wanloadbalance@3:webproxy@2:firewall@5:ntp@1:dhcp-server@5:dhcp-relay@2:system@10:nat@4:quagga@7:qos@1:ipsec@5:conntrack-sync@1:config-management@1:vrrp@2:pptp@1" === */
/* Release version: 1.2.8 */
  • gw2.cfg
配置文件
# ./startup-conf/gw2.cfg
interfaces {ethernet eth1 {address 10.1.8.1/24duplex autosmp-affinity autospeed auto}ethernet eth2 {        address 172.12.1.11/24duplex autosmp-affinity autospeed auto}loopback lo {}tunnel tun0 {# 配置 ipip 设置本端地址,远端地址address 1.1.1.2/24encapsulation ipiplocal-ip 172.12.1.11multicast disableremote-ip 172.12.1.10}
}
protocols {static {# 静态路由,指定到达 10.1.8.0/24 网络的下一条为 1.1.1.1, 1.1.1.1 和 1.1.1.2 组成了 ipiproute 10.1.5.0/24 {next-hop 1.1.1.1 {}}}
}
system {config-management {commit-revisions 100}console {device ttyS0 {speed 9600}}host-name vyoslogin {user vyos {authentication {encrypted-password $6$QxPS.uk6mfo$9QBSo8u1FkH16gMyAVhus6fU3LOzvLR9Z9.82m3tiHFAxTtIkhaZSWssSgzt4v4dGAL8rhVQxTg0oAG9/q11h/plaintext-password ""}level admin}}ntp {server 0.pool.ntp.org {}server 1.pool.ntp.org {}server 2.pool.ntp.org {}}syslog {global {facility all {level info}facility protocols {level debug}}}time-zone UTC
}/* Warning: Do not remove the following line. */
/* === vyatta-config-version: "dns-forwarding@1:mdns@1:ssh@1:webproxy@1:webgui@1:zone-policy@1:broadcast-relay@1:l2tp@1:cluster@1:snmp@1:pppoe-server@2:conntrack@1:wanloadbalance@3:webproxy@2:firewall@5:ntp@1:dhcp-server@5:dhcp-relay@2:system@10:nat@4:quagga@7:qos@1:ipsec@5:conntrack-sync@1:config-management@1:vrrp@2:pptp@1" === */
/* Release version: 1.2.8 */

d | 部署服务

# tree -L 2 ./
./
├── ipip.clab.yml
└── startup-conf├── gw1.cfg└── gw2.cfg# clab deploy -t ipip.clab.yml
INFO[0000] Containerlab v0.54.2 started                 
INFO[0000] Parsing & checking topology file: clab.yaml  
INFO[0000] Creating docker network: Name="clab", IPv4Subnet="172.20.20.0/24", IPv6Subnet="2001:172:20:20::/64", MTU=1500 
INFO[0000] Creating lab directory: /root/wcni-kind/network/5-demo-cni/7-ipip/1-clab-ipip/clab-ipip 
INFO[0000] Creating container: "gw2"                    
INFO[0000] Creating container: "server1"                
INFO[0000] Creating container: "server2"                
INFO[0000] Creating container: "gw1"                    
INFO[0001] Created link: gw2:eth1 <--> server2:net0     
INFO[0001] Created link: gw1:eth1 <--> server1:net0     
INFO[0001] Created link: gw1:eth2 <--> gw2:eth2         
INFO[0001] Executed command "ip addr add 10.1.5.10/24 dev net0" on the node "server1". stdout: 
INFO[0001] Executed command "ip route replace default via 10.1.5.1" on the node "server1". stdout: 
INFO[0001] Executed command "ip addr add 10.1.8.10/24 dev net0" on the node "server2". stdout: 
INFO[0001] Executed command "ip route replace default via 10.1.8.1" on the node "server2". stdout: 
INFO[0001] Adding containerlab host entries to /etc/hosts file 
INFO[0001] Adding ssh config for containerlab nodes     
INFO[0001] 🎉 New containerlab version 0.55.0 is available! Release notes: https://containerlab.dev/rn/0.55/
Run 'containerlab version upgrade' to upgrade or go check other installation options at https://containerlab.dev/install/ 
+---+-------------------+--------------+------------------------------------------+-------+---------+----------------+----------------------+
| # |       Name        | Container ID |                  Image                   | Kind  |  State  |  IPv4 Address  |     IPv6 Address     |
+---+-------------------+--------------+------------------------------------------+-------+---------+----------------+----------------------+
| 1 | clab-ipip-gw1     | 7233e41cefc0 | vyos/vyos:1.2.8                          | linux | running | 172.20.20.5/24 | 2001:172:20:20::5/64 |
| 2 | clab-ipip-gw2     | 40e261a67337 | vyos/vyos:1.2.8                          | linux | running | 172.20.20.2/24 | 2001:172:20:20::2/64 |
| 3 | clab-ipip-server1 | 309377fc3ef8 | harbor.dayuan1997.com/devops/nettool:0.9 | linux | running | 172.20.20.3/24 | 2001:172:20:20::3/64 |
| 4 | clab-ipip-server2 | 76e300927841 | harbor.dayuan1997.com/devops/nettool:0.9 | linux | running | 172.20.20.4/24 | 2001:172:20:20::4/64 |
+---+-------------------+--------------+------------------------------------------+-------+---------+----------------+----------------------+

e | 查看 4 个容器路由表信息

## clab-ipip-server1 主机路由
# lo clab-ipip-server1 ip r s
default via 10.1.5.1 dev net0 
10.1.5.0/24 dev net0 proto kernel scope link src 10.1.5.10 
172.20.20.0/24 dev eth0 proto kernel scope link src 172.20.20.3## clab-ipip-server2 主机路由
# lo clab-ipip-server2 ip r s
default via 10.1.8.1 dev net0 
10.1.8.0/24 dev net0 proto kernel scope link src 10.1.8.10 
172.20.20.0/24 dev eth0 proto kernel scope link src 172.20.20.4## clab-ipip-gw1 主机路由
# lo clab-ipip-gw1 ip r s
default via 172.20.20.1 dev eth0 
1.1.1.0/24 dev tun0 proto kernel scope link src 1.1.1.1 
10.1.5.0/24 dev eth1 proto kernel scope link src 10.1.5.1 
10.1.8.0/24 via 1.1.1.2 dev tun0 proto static metric 20 
172.12.1.0/24 dev eth2 proto kernel scope link src 172.12.1.10 
172.20.20.0/24 dev eth0 proto kernel scope link src 172.20.20.5 ## clab-ipip-gw2 主机路由
# lo clab-ipip-gw2 ip r s
default via 172.20.20.1 dev eth0 
1.1.1.0/24 dev tun0 proto kernel scope link src 1.1.1.2 
10.1.5.0/24 via 1.1.1.1 dev tun0 proto static metric 20 
10.1.8.0/24 dev eth1 proto kernel scope link src 10.1.8.1 
172.12.1.0/24 dev eth2 proto kernel scope link src 172.12.1.11 
172.20.20.0/24 dev eth0 proto kernel scope link src 172.20.20.2 

f| 抓包分析

  • s1.cap 包分析

server1 net0 网卡

img

server1~$ ip a l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
42: eth0@if43: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:14:14:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 172.20.20.3/24 brd 172.20.20.255 scope global eth0valid_lft forever preferred_lft foreverinet6 2001:172:20:20::3/64 scope global nodad valid_lft forever preferred_lft foreverinet6 fe80::42:acff:fe14:1403/64 scope link valid_lft forever preferred_lft forever
51: net0@if50: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9500 qdisc noqueue state UP group default link/ether aa:c1:ab:52:61:07 brd ff:ff:ff:ff:ff:ff link-netnsid 1inet 10.1.5.10/24 scope global net0valid_lft forever preferred_lft foreverinet6 fe80::a8c1:abff:fe52:6107/64 scope link valid_lft forever preferred_lft foreverserver1~$ ip n s
10.1.5.1 dev net0 lladdr aa:c1:ab:32:5c:7c STALE

icmp 包中,源 mac 地址:aa:c1:ab:52:61:07 目标 mac 地址:aa:c1:ab:32:5c:7c , 分别为 s1 主机的 net0 网卡的 mac 地址,和 gw1 路由器 10.1.5.1 ipmac 地址

  • gw1.cap 包分析

gw1 tun0 网卡

img

icmp 包中,没有 mac 信息,只有源 ip 目的 ip 信息,这也是 ipip 数据的特性

gw1 eth2 网卡

img

root@gw1:/# ip a l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
3: tun0@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 9480 qdisc noqueue state UNKNOWN group default qlen 1000link/ipip 172.12.1.10 peer 172.12.1.11inet 1.1.1.1/24 brd 1.1.1.255 scope global tun0valid_lft forever preferred_lft foreverinet6 fe80::200:5efe:ac0c:10a/64 scope link valid_lft forever preferred_lft forever
46: eth2@if47: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9500 qdisc noqueue state UP group default link/ether aa:c1:ab:01:4b:7f brd ff:ff:ff:ff:ff:ff link-netnsid 2inet 172.12.1.10/24 brd 172.12.1.255 scope global eth2valid_lft forever preferred_lft foreverinet6 fe80::a8c1:abff:fe01:4b7f/64 scope link valid_lft forever preferred_lft forever
50: eth1@if51: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9500 qdisc noqueue state UP group default link/ether aa:c1:ab:32:5c:7c brd ff:ff:ff:ff:ff:ff link-netnsid 1inet 10.1.5.1/24 brd 10.1.5.255 scope global eth1valid_lft forever preferred_lft foreverinet6 fe80::a8c1:abff:fe32:5c7c/64 scope link valid_lft forever preferred_lft forever
52: eth0@if53: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:14:14:05 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 172.20.20.5/24 brd 172.20.20.255 scope global eth0valid_lft forever preferred_lft foreverinet6 2001:172:20:20::5/64 scope global nodad valid_lft forever preferred_lft foreverinet6 fe80::42:acff:fe14:1405/64 scope link valid_lft forever preferred_lft foreverroot@gw1:/# ip n s
172.20.20.1 dev eth0 lladdr 02:42:58:fa:8c:a6 STALE
10.1.5.10 dev eth1 lladdr aa:c1:ab:52:61:07 STALE
172.12.1.11 dev eth2 lladdr aa:c1:ab:2c:67:36 STALE
fe80::42:acff:fe14:1404 dev eth0 lladdr 02:42:ac:14:14:04 STALE
fe80::1 dev eth0 lladdr 02:42:58:fa:8c:a6 router STALE
2001:172:20:20::1 dev eth0 lladdr 02:42:58:fa:8c:a6 router STALE
fe80::42:acff:fe14:1403 dev eth0 lladdr 02:42:ac:14:14:03 STALE
fe80::a8c1:abff:fe52:6107 dev eth1 lladdr aa:c1:ab:52:61:07 STALE

icmp 包中,源 mac 地址:aa:c1:ab:01:4b:7f 目标 mac 地址:aa:c1:ab:2c:67:36 ,分别为 gw1 路由器的 eth2 网卡的 mac 地址,和 gw2 路由器 172.12.1.11 ipmac 地址

查看网卡的 ipip 信息

root@gw1:/# ip -d link show
3: tun0@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 9480 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000link/ipip 172.12.1.10 peer 172.12.1.11 promiscuity 0 minmtu 68 maxmtu 65515 

所以分析得出:

  • eth2 网络的数据包,只是在 tun0 网卡的数据包基础上在重新为其头部封装 ip 数据包头,数据链路包头,并通过已有的网络路由,进行包传输。
  • ipip 数据包内部的数据包,没有 mac 地址,并且 tun0 网卡本身也没有 mac 地址信息。对比 vxlan 数据包,vxlan 包的内部包 mac 地址分别为 gw1 路由器的 vxlan0 网卡的 mac 地址,和 gw2 路由器 1.1.1.2 ipmac 地址
  • 传输过程中, ipip 内部的 ip 地址,源 ip 和 目标 ip 不会发生改变

icmp 包中,源 mac 地址:aa:c1:ab:a3:83:7c 目标 mac 地址:aa:c1:ab:51:78:51 ,分别为 gw2 路由器 10.1.8.1 ipmac 地址,和 s2 路由器 net0mac 地址

  • 总结:查看上面抓包图片,可以分析到,在 ipip 模式中,数据包的转发流程中:
    • 数据包在送到 ipip 接口之前,mac 地址,每经过一个节点,源 mac 和 目标 mac 均会发生改变。送到 ipip 接口之后,会去掉 mac 地址信息
    • 数据包在送到 ipip 接口之前,源 ip 和 目标 ip 不会发生改变。送到 ipip 接口之后,内层源 ip 和 目标 ip 不会发生改变,会在原数据包网络层上进行封包,多一次封装外层源 ip 和 目标 ip
    • ipip 数据包内部的数据包,没有 mac 地址,并且 tun0 网卡本身也没有 mac 地址信息。对比 vxlan 数据包,vxlan 包的内部包 mac 地址分别为 gw1 路由器的 vxlan0 网卡的 mac 地址,和 gw2 路由器 1.1.1.2 ipmac 地址

g | 数据包流向

拓扑

  • 数据从 server1 服务器发出,通过查看本机路由表,送往 gw1 网关。路由: default via 10.1.5.1 dev net0
  • gw1 网关查看自身路由后,会送往 ipip 接口,因为目的地址为 10.1.8.10。路由: `10.1.8.0/24 via 1.1.1.2 dev tun0 proto static metric 20
  • tun0 接口为 ipip 模式,会重新封装数据包,封装信息查看 ipip 配置信息 link/ipip 172.12.1.10 peer 172.12.1.11 promiscuity 0 minmtu 68 maxmtu 65515
  • 数据包在封装过程中,发新的目的地址为 172.12.1.11,会查看路由表,送往 eth2 接口。路由: 172.12.1.0/24 dev eth2 proto kernel scope link src 172.12.1.10
  • 数据封装完成后,会送往 eth2 接口,并送往对端 gw2 主机。
  • 对端 gw2 主机接受到数据包后,发现这个是一个 ipip 数据包,接收端会将外层 IP 头部去掉,提取内层的 IP 数据包。
  • 内核模块或应用程序对数据包进行 VXLAN 头解析。VXLAN 头包含一个 VXLAN 网络标识符( VNI ),用于标识不同的 VXLAN 隧道。
  • 内层数据包会被重新交给 tun0 接口 进行处理,就像是接收到了一个普通的IP数据包一样。
  • 解封装后发现内部的数据包,目的地址为 10.1.8.10 ,通过查看本机路由表,送往 eth1 网卡。路由: 10.1.8.0/24 dev eth1 proto kernel scope link src 10.1.8.1
  • 通过 eth1 网卡,最终会把数据包送到 server2 主机

h | VyOS cli 配置

  • gw1 cli 接口配置
root@gw1:/# show configuration commands
set interfaces ethernet eth1 address '10.1.5.1/24'
set interfaces ethernet eth1 duplex 'auto'
set interfaces ethernet eth1 smp-affinity 'auto'
set interfaces ethernet eth1 speed 'auto'
set interfaces ethernet eth2 address '172.12.1.10/24'
set interfaces ethernet eth2 duplex 'auto'
set interfaces ethernet eth2 smp-affinity 'auto'
set interfaces ethernet eth2 speed 'auto'
set interfaces loopback lo
set interfaces tunnel tun0 address '1.1.1.1/24'
set interfaces tunnel tun0 encapsulation 'ipip'
set interfaces tunnel tun0 local-ip '172.12.1.10'
set interfaces tunnel tun0 multicast 'disable'
set interfaces tunnel tun0 remote-ip '172.12.1.11'
set protocols static route 10.1.8.0/24 next-hop 1.1.1.2
set system config-management commit-revisions '100'
set system console device ttyS0 speed '9600'
set system host-name 'vyos'
set system login user vyos authentication encrypted-password '$6$QxPS.uk6mfo$9QBSo8u1FkH16gMyAVhus6fU3LOzvLR9Z9.82m3tiHFAxTtIkhaZSWssSgzt4v4dGAL8rhVQxTg0oAG9/q11h/'
set system login user vyos authentication plaintext-password ''
set system login user vyos level 'admin'
set system ntp server 0.pool.ntp.org
set system ntp server 1.pool.ntp.org
set system ntp server 2.pool.ntp.org
set system syslog global facility all level 'info'
set system syslog global facility protocols level 'debug'
set system time-zone 'UTC'
  • gw2 cli 接口配置
root@gw2:/# show configuration commands
set interfaces ethernet eth1 address '10.1.8.1/24'
set interfaces ethernet eth1 duplex 'auto'
set interfaces ethernet eth1 smp-affinity 'auto'
set interfaces ethernet eth1 speed 'auto'
set interfaces ethernet eth2 address '172.12.1.11/24'
set interfaces ethernet eth2 duplex 'auto'
set interfaces ethernet eth2 smp-affinity 'auto'
set interfaces ethernet eth2 speed 'auto'
set interfaces loopback lo
set interfaces tunnel tun0 address '1.1.1.2/24'
set interfaces tunnel tun0 encapsulation 'ipip'
set interfaces tunnel tun0 local-ip '172.12.1.11'
set interfaces tunnel tun0 multicast 'disable'
set interfaces tunnel tun0 remote-ip '172.12.1.10'
set protocols static route 10.1.5.0/24 next-hop 1.1.1.1
set system config-management commit-revisions '100'
set system console device ttyS0 speed '9600'
set system host-name 'vyos'
set system login user vyos authentication encrypted-password '$6$QxPS.uk6mfo$9QBSo8u1FkH16gMyAVhus6fU3LOzvLR9Z9.82m3tiHFAxTtIkhaZSWssSgzt4v4dGAL8rhVQxTg0oAG9/q11h/'
set system login user vyos authentication plaintext-password ''
set system login user vyos level 'admin'
set system ntp server 0.pool.ntp.org
set system ntp server 1.pool.ntp.org
set system ntp server 2.pool.ntp.org
set system syslog global facility all level 'info'
set system syslog global facility protocols level 'debug'
set system time-zone 'UTC'

i | 销毁服务

# clab destroy -t ipip.clab.yml

二、手动搭建 ipip 网络

a | 拓扑

拓扑

b | 配置命令

  • host 141 主机配置命令
# host 141
## 创建名称空间
ip netns add ns1## 创建 br0 类型为网桥
ip l a br0 type bridge
ip l s br0 up## 创建 1对 veth pair 网卡
ip l a int0 type veth peer name br-int0## ns1 配置信息,网卡 int0 一端插到 ns1,一端插到 br0 网桥
ip l s int0 netns ns1
ip netns exec ns1 ip l s int0 up
ip netns exec ns1 ip a a 10.1.5.10/24 dev int0
ip netns exec ns1 ip r a default via 10.1.5.1 dev int0## veth pair 网卡另一端插到 br0 网桥
ip l s br-int0 master br0
ip l s br-int0 up## br0 网卡配置网关地址
ip a a 10.1.5.1/24 dev br0## 创建 ipip 
ip tunnel add tun0 mode ipip remote 172.16.94.142 local 172.16.94.141
ip addr a 1.1.1.1/24 dev tun0
ip link set tun0 up## 添加路由
ip r a 10.1.8.0/24 via 1.1.1.2 dev tun0 
  • host 142 主机配置命令
# host 142
## 创建名称空间
ip netns add ns1## 创建 br0 类型为网桥
ip l a br0 type bridge
ip l s br0 up## 创建 1对 veth pair 网卡
ip l a int0 type veth peer name br-int0## ns1 配置信息,网卡 int0 一端插到 ns1,一端插到 br0 网桥
ip l s int0 netns ns1
ip netns exec ns1 ip l s int0 up
ip netns exec ns1 ip a a 10.1.8.10/24 dev int0
ip netns exec ns1 ip r a default via 10.1.8.1## veth pair 网卡另一端插到 br0 网桥
ip l s br-int0 master br0
ip l s br-int0 up## br0 网卡是在为网关 宿主机添加路由 打通网络
ip a a 10.1.8.1/24 dev br0## 创建 ipip 
ip tunnel add tun0 mode ipip remote 172.16.94.141 local 172.16.94.142
ip addr a 1.1.1.2/24 dev tun0
ip link set tun0 up## 添加路由
ip r a 10.1.5.0/24 via 1.1.1.1 dev tun0 

c | 测试网络

# ip netns exec ns1 ping 10.1.8.10 -c 1
PING 10.1.8.10 (10.1.8.10) 56(84) bytes of data.
64 bytes from 10.1.8.10: icmp_seq=1 ttl=62 time=0.678 ms--- 10.1.8.10 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.678/0.678/0.678/0.000 ms

d | 抓包分析

  • 142 主机 ens33 网卡
#  tcpdump -pne -i ens33 'ip proto 4'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
09:51:43.088712 00:0c:29:81:cc:3a > 00:0c:29:1a:5c:d3, ethertype IPv4 (0x0800), length 118: 172.16.94.141 > 172.16.94.142: 10.1.5.10 > 10.1.8.10: ICMP echo request, id 2359, seq 1, length 64 (ipip-proto-4)
09:51:43.088968 00:0c:29:1a:5c:d3 > 00:0c:29:81:cc:3a, ethertype IPv4 (0x0800), length 118: 172.16.94.142 > 172.16.94.141: 10.1.8.10 > 10.1.5.10: ICMP echo reply, id 2359, seq 1, length 64 (ipip-proto-4)

icmp 包中,源 mac 地址:00:0c:29:81:cc:3a 目标 mac 地址:00:0c:29:1a:5c:d3, ,分别为 141 主机的 172.16.94.141 网卡的 mac 地址,和 142 主机 172.16.94.142 网卡的 mac 地址

  • 142 主机 tun0 网卡
#  tcpdump -pne -i tun0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes
09:51:43.088712 ip: 10.1.5.10 > 10.1.8.10: ICMP echo request, id 2359, seq 1, length 64
09:51:43.088961 ip: 10.1.8.10 > 10.1.5.10: ICMP echo reply, id 2359, seq 1, length 64
  • 142 主机 ns1 名称空间 int0 网卡
# ip netns exec ns1 tcpdump -pne -i int0
09:51:43.088937 96:59:54:42:fa:1b > 2e:90:a2:6e:a8:36, ethertype IPv4 (0x0800), length 98: 10.1.5.10 > 10.1.8.10: ICMP echo request, id 2359, seq 1, length 64
09:51:43.088953 2e:90:a2:6e:a8:36 > 96:59:54:42:fa:1b, ethertype IPv4 (0x0800), length 98: 10.1.8.10 > 10.1.5.10: ICMP echo reply, id 2359, seq 1, length 64

icmp 包中,源 mac 地址:96:59:54:42:fa:1b 目标 mac 地址:2e:90:a2:6e:a8:36, ,分别为 142 主机的 br-int0 网卡的 mac 地址,和 142 主机 n1 名称空间 int0 网卡的 mac 地址

e | 资源回收

## 141
# ip netns del ns1 && ip l d br0 && reboot## 142
# ip netns del ns1 && ip l d br0 && reboot

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/45180.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

设计模式-策略模式

策略模式,又叫政策模式,它是将定义的算法家族分别封装起来,让他们之间可以互相替换,从而让算法的变化不会影响到使用算法的用户,属于行为型模式。 策略模式主要包含三种角色: 上下文角色(Context):用来操作策略的上下文环境,屏蔽高层模块对策略,算法的直接访问,封装…

文件内容比较

造冰箱的大熊猫@cnblogs 2024/6/18 1、文本文件 推荐使用Meld软件 Meld为开源软件,支持Linux和Windows,以并列窗口的形式显示两个或三个文件的内容差异,能够选择文件编码格式(比如GB2312或UTF-8)。非常好用,个人强烈推荐 2、二进制文件 1)Linux下可以使用命令行工具diff…

实验7

task4点击查看代码 #include<stdio.h>int main(){FILE *fp;int sum=0;char ch;fp=fopen("data4.txt","r");if(fp==NULL){printf("不能打开文件\n");return 1;}ch=fgetc(fp);while((ch=fgetc(fp))!=EOF){if(ch!= &&ch!=\t){++sum;}…

CSP历年复赛题-P7911 [CSP-J 2021] 网络连接

原题链接:https://www.luogu.com.cn/problem/P7911 题意解读:服务器server建立连接,客户端client加入连接,建立和加入连接都要指定一个ip地址,对已经建立过连接的ip地址再次建立连接会失败,加入连接没有限制,根据要求进行输出。 解题思路: 此题有两个关键点: 1、验证I…

网络基本认知(1)--网络基础知识

实 验 目 的 和 要 求理解和掌握有关网络的概念、分类、组成等基本知识。 通过使用网络,了解a网络的基本功能。 网络性能对网络使用者来说至关重要,理解影响网络的使用有关因素。 通过对互联网的认知,从某一方面探讨对《互联网+》中的“+”理解,并谈一谈您的想法。 (宋体小…

WPF使用XAML实现报表的一种思路(支持外部加载)

在WPF里做报告这一块以前用过多种实现方式,有用过RDLC、XPS等,看过一些开源的报表控件,跟RDLC的原理都差不多。 最近刚好又要实现报表的功能,就想直接使用XAML实现,直接将界面呈现的内容打印出来。打印WPF元素 在我前面的文章中,介绍过如何使用PrintDialog打印WPF元素, …

Hadoop习题汇总(更新中)

目录选择单选多选判断填空简答 选择 单选 查看HDFS系统版本的Shell命令,以下正确的是()。 hdfs -ver hdfs version (答案) dfsadmin version hadoop -ver 数据存储单位从小到大排列顺序是() TB、PB、EB、ZB、YB (答案) TB、YB、ZB、PB、EB TB、PB、EB、YB、ZB TB、EB、…