練習2

練習2

  • 一個設備只能從屬一個名稱空間
  • 設備從屬網路名稱空間的切換

1.使用ip命令創建r1、r2網路名稱空間

[root@localhost ~]# ip netns add r1
[root@localhost ~]# ip netns add r2
[root@localhost ~]# ip netns list
r2
r1

2. 使用ip命令查看r1、r2網路名稱空間的網卡

[root@localhost ~]# ip netns exec r1 ifconfig -a  #沒有active要加上-a才看的見
lo: flags=8<LOOPBACK>  mtu 65536
       loop  txqueuelen 1000  (Local Loopback)
       RX packets 0  bytes 0 (0.0 B)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 0  bytes 0 (0.0 B)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@localhost ~]# ip netns exec r2 ifconfig -a 
lo: flags=8<LOOPBACK>  mtu 65536
       loop  txqueuelen 1000  (Local Loopback)
       RX packets 0  bytes 0 (0.0 B)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 0  bytes 0 (0.0 B)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

3. 使用ip命令創建虛擬網卡對

[root@localhost ~]# ip link add veth1.1 type veth peer name veth1.2
[root@localhost ~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
   link/ether 00:0c:29:98:00:1a brd ff:ff:ff:ff:ff:ff
3: veth1.2@veth1.1: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000  #veth1.2的另一半是veth1.1,預設沒有active
   link/ether 12:37:6b:aa:11:d7 brd ff:ff:ff:ff:ff:ff
4: veth1.1@veth1.2: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000  #veth1.1的另一半是veth1.2,預設沒有active
   link/ether 3e:2a:8b:a6:a2:aa brd ff:ff:ff:ff:ff:ff

4. 使用ip命令將veth1.1留在宿主機上,而將veth1.2綁在r1網路名稱空間

[root@localhost ~]# ip link set veth1.2 netns r1
[root@localhost ~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
   link/ether 00:0c:29:98:00:1a brd ff:ff:ff:ff:ff:ff
4: veth1.1@if3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000  #只剩veth1.1留在宿主機上
   link/ether 3e:2a:8b:a6:a2:aa brd ff:ff:ff:ff:ff:ff link-netnsid 0
[root@localhost ~]# ip netns exec r1 ifconfig -a
lo: flags=8<LOOPBACK>  mtu 65536
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth1.2: flags=4098<BROADCAST,MULTICAST>  mtu 1500  #veth1.2綁在r1網路名稱空間
        ether 12:37:6b:aa:11:d7  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

5.使用ip命令修改r1網路名稱空間中veth1.2虛擬網卡設備的名稱為eth0

[root@localhost ~]# ip netns exec r1 ip link set veth1.2 name eth0
[root@localhost ~]# ip netns exec r1 ifconfig -a
eth0: flags=4098<BROADCAST,MULTICAST>  mtu 1500
       ether 12:37:6b:aa:11:d7  txqueuelen 1000  (Ethernet)
       RX packets 0  bytes 0 (0.0 B)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 0  bytes 0 (0.0 B)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=8<LOOPBACK>  mtu 65536
       loop  txqueuelen 1000  (Local Loopback)
       RX packets 0  bytes 0 (0.0 B)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 0  bytes 0 (0.0 B)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

6. 使用ifconfig命令為宿主機上veth1.1虛擬網卡配置ip為10.1.0.1/24並active它

[root@localhost ~]# ifconfig veth1.1 10.1.0.1/24 up
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
       inet 192.168.128.234  netmask 255.255.255.0  broadcast 192.168.128.255
       inet6 fe80::12da:f368:4b08:ba51  prefixlen 64  scopeid 0x20<link>
       ether 00:0c:29:98:00:1a  txqueuelen 1000  (Ethernet)
       RX packets 1609  bytes 160235 (156.4 KiB)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 839  bytes 133539 (130.4 KiB)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
       inet 127.0.0.1  netmask 255.0.0.0
       inet6 ::1  prefixlen 128  scopeid 0x10<host>
       loop  txqueuelen 1000  (Local Loopback)
       RX packets 64  bytes 5568 (5.4 KiB)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 64  bytes 5568 (5.4 KiB)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
veth1.1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
       inet 10.1.0.1  netmask 255.255.255.0  broadcast 10.1.0.255
       ether 3e:2a:8b:a6:a2:aa  txqueuelen 1000  (Ethernet)
       RX packets 0  bytes 0 (0.0 B)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 0  bytes 0 (0.0 B)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

7.使用ip命令為r1網路名稱空間中eth0虛擬網卡配置ip為10.1.0.2/24並active它

[root@localhost ~]# ip netns exec r1 ifconfig eth0 10.1.0.2/24 up
[root@localhost ~]# ip netns exec r1 ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
       inet 10.1.0.2  netmask 255.255.255.0  broadcast 10.1.0.255
       inet6 fe80::1037:6bff:feaa:11d7  prefixlen 64  scopeid 0x20<link>
       ether 12:37:6b:aa:11:d7  txqueuelen 1000  (Ethernet)
       RX packets 7  bytes 586 (586.0 B)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 7  bytes 586 (586.0 B)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

8. 在宿主機上使用ping命令與r1網路名稱空間中eth0虛擬網卡進行通訊

[root@localhost ~]# ping 10.1.0.2
PING 10.1.0.2 (10.1.0.2) 56(84) bytes of data.
64 bytes from 10.1.0.2: icmp_seq=1 ttl=64 time=0.048 ms
64 bytes from 10.1.0.2: icmp_seq=2 ttl=64 time=0.059 ms

9.使用ip命令將宿主機上veth1.1虛擬網卡綁在r2網路名稱空間

提示:綁過去後,ip會清除並處於未active狀態。

[root@localhost ~]# ip link set veth1.1 netns r2
[root@localhost ~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
   link/ether 00:0c:29:98:00:1a brd ff:ff:ff:ff:ff:ff
[root@localhost ~]# ip netns exec r2 ifconfig -a
lo: flags=8<LOOPBACK>  mtu 65536
       loop  txqueuelen 1000  (Local Loopback)
       RX packets 0  bytes 0 (0.0 B)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 0  bytes 0 (0.0 B)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
veth1.1: flags=4098<BROADCAST,MULTICAST>  mtu 1500
       ether 3e:2a:8b:a6:a2:aa  txqueuelen 1000  (Ethernet)
       RX packets 13  bytes 1034 (1.0 KiB)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 13  bytes 1034 (1.0 KiB)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

10.使用ip命令為r2網路名稱空間中veth1.1虛擬網卡配置ip為10.1.0.1/24並active它

[root@localhost ~]# ip netns exec r2 ifconfig veth1.1 10.1.0.1/24 up
[root@localhost ~]# ip netns exec r2 ifconfig
veth1.1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
       inet 10.1.0.1  netmask 255.255.255.0  broadcast 10.1.0.255
       inet6 fe80::3c2a:8bff:fea6:a2aa  prefixlen 64  scopeid 0x20<link>
       ether 3e:2a:8b:a6:a2:aa  txqueuelen 1000  (Ethernet)
       RX packets 13  bytes 1034 (1.0 KiB)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 20  bytes 1620 (1.5 KiB)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

11. 使用ip命令在r2網路名稱空間上使用ping命令與r1網路名稱空間中eth0虛擬網卡進行通訊

[root@localhost ~]# ip netns exec r2 ping 10.1.0.2
PING 10.1.0.2 (10.1.0.2) 56(84) bytes of data.
64 bytes from 10.1.0.2: icmp_seq=1 ttl=64 time=0.041 ms
64 bytes from 10.1.0.2: icmp_seq=2 ttl=64 time=0.062 ms