易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 3958|回复: 0
收起左侧

ip netns 常用的namespace的命令

[复制链接]
发表于 2019-6-21 15:02:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x

netns是在linux中提供网络虚拟化的一个项目,使用netns网络空间虚拟化可以在本地虚拟化出多个网络环境,目前netns在lxc容器中被用来为容器提供网络。

使用netns创建的网络空间独立于当前系统的网络空间,其中的网络设备以及iptables规则等都是独立的,就好像进入了另外一个网络一样。

netns虚拟网络空间的网络通信依赖于物理接口,光讲听上去很虚,我们来操练点实际的看看:

1.创建虚拟网络空间:

ip netns add ns1

这样我们就得到了一个名为ns1的网络空间,虚拟网络空间除了网络是虚的以外,文件系统完全和当前系统共享,也就是说所有本地可以使用的命令都可以在虚拟网络中使用,我们进入ns1看看情况:

ip netns exec ns1 bash

ifconfig -a

~# ifconfig -a, d3 w  v! F/ K9 u
lo Link encap:Local Loopback9 U$ P3 F" Z" Q. @9 `5 c: U3 F
LOOPBACK MTU:16436 Metric:11 j0 o% w( w. t3 G
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
0 c% G) Y% X4 d# t0 H' ~TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
/ B1 C1 c- h- J# q! Tcollisions:0 txqueuelen:0
; z  W7 t# }) h/ _7 JRX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

可以看到ns1中默认添加了一个本地回路设备,其他神马也没有,下面我们退出ns1,给他添加点网卡,之所以要在外部添加网卡是因为我们要为后面联通网络做准备,

exit

ip link add name ns1-nic type veth peer name ns1-vnic

这里我们添加了一对veth设备,veth设备是成对出现的,两个设备之间的数据是相互贯通的,我们把ns1-vnic加入到ns1网络空间中:

ip link set ns1-vnic netns ns1

这样ns1-vnic就进入到ns1空间了,在本地网络中已经无法查看到,我们重新进入ns1看看现在的情况:

ip netns exec ns1 bash

# ifconfig -a3 |. P- |; ?8 R  d' |
lo Link encap:Local Loopback- R3 A5 |& h4 f$ R, x% S5 ?7 n
LOOPBACK MTU:16436 Metric:1
  r& i0 g# B# zRX packets:0 errors:0 dropped:0 overruns:0 frame:0
/ \- `- ~8 N) kTX packets:0 errors:0 dropped:0 overruns:0 carrier:0
8 f; H2 I. @. s4 j2 acollisions:0 txqueuelen:0) H& K; ^) A% ]; x2 I+ _2 a) U8 J2 T
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

ns1-vnic Link encap:Ethernet HWaddr 92:69:39:f3:b3:be8 ]' ?% e6 i* J3 d( F
BROADCAST MULTICAST MTU:1500 Metric:1
: \4 n2 f3 p- ^% ~" mRX packets:0 errors:0 dropped:0 overruns:0 frame:0
4 p) h3 A3 t$ a' y8 }TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
  _$ V, M  E& a3 Bcollisions:0 txqueuelen:1000
: a/ u8 Q8 ~6 ^7 E" G! b. gRX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

可以看到多出来了一块网卡,虽然网卡名字有点丑,不过网卡名字可以随意修改的,我们改一改:

ip link set ns1-vnic name eth0
, ~. \1 ]. X* j# ifconfig -a
3 W6 ~5 o2 n9 n! D9 }9 Z2 beth0 Link encap:Ethernet HWaddr 92:69:39:f3:b3:be
/ l# F4 Z  n% N9 [* J& S5 P0 A, k8 GBROADCAST MULTICAST MTU:1500 Metric:1- A, `7 X/ y. V. h& G4 N% b! d3 @
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
' f$ y' G0 ]$ b, D9 Y6 oTX packets:0 errors:0 dropped:0 overruns:0 carrier:0! R  z$ d: w4 z% J! I* z
collisions:0 txqueuelen:1000
, L. u. d: A( D- f3 g! QRX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

lo Link encap:Local Loopback
% M& L' z. l4 o/ t5 ]5 F# ELOOPBACK MTU:16436 Metric:1+ G% r& R9 X/ n. G
RX packets:0 errors:0 dropped:0 overruns:0 frame:06 d, A  S0 n4 T" t
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0) H* w5 X' X3 }
collisions:0 txqueuelen:0
# m4 a+ [; x$ d1 p) ?) R+ P- GRX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

刚才把默认的名字修改为了eth0,下面我们给他分配一个private ip address:

ip addr add 10.0.0.100/24 dev eth0

然后把它启动起来:

ip link set eth0 up- d7 |' h. c( @9 F
# ifconfig
/ B" p3 A* X  h1 f8 @eth0 Link encap:Ethernet HWaddr 92:69:39:f3:b3:be$ e: H' ?# `" {7 t' }1 U# Z$ X
inet addr:10.0.0.100 Bcast:0.0.0.0 Mask:255.255.255.0/ t+ C* u' K2 x6 W; Z
UP BROADCAST MULTICAST MTU:1500 Metric:1
2 M; A! i" {9 |8 bRX packets:0 errors:0 dropped:0 overruns:0 frame:0% P) C% r1 N9 j6 F" }1 M5 ^
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
% @# i6 N$ a7 b% {( Q6 ~( N/ Ccollisions:0 txqueuelen:1000
1 q! }3 o8 _$ Y: c6 t7 z5 D2 t3 wRX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

然后我们再把回环起起来,ping一下自己感受一下:

# ip link set lo up0 p: k) W" D" ]4 v$ q, j
root@ubuntu:~# ping 10.0.0.100
+ S. s3 Q3 l- A4 i/ B6 |3 K# IPING 10.0.0.100 (10.0.0.100) 56(84) bytes of data.
1 B. h9 j4 j. S  C64 bytes from 10.0.0.100: icmp_req=1 ttl=64 time=0.072 ms
$ {0 [( z" k0 F% x64 bytes from 10.0.0.100: icmp_req=2 ttl=64 time=0.040 ms

嗷嗷!ping自己通了!那么我们怎么样让ns1中的eth0和真实server中的网络进行通信呢?首先让他能和本地物理机通信,我们在物理机网络中采用桥接的方式,把刚才添加veth虚拟网卡的时候被拆开的一对的剩下一只添加的网桥里面,利用成对veth相互之间数据贯通的特性来实现网络互通:

先退出ns1,本地添加网桥:

exit

brctl addbr testbr

brctl addif testbr ns1-nic

ip link set ns1-nic up

然后给网桥设置一个ip地址:

ip addr add 10.0.0.1/24 dev testbr

ip link set testbr up

~# ifconfig testbr
- j4 R* G* ^  B- w' V. wtestbr Link encap:Ethernet HWaddr 6a:d1:34:5b:3c:99
  u" `4 I; H1 J) {' Vinet addr:10.0.0.1 Bcast:0.0.0.0 Mask:255.255.255.0, ]* E3 F3 t2 X$ A7 e
inet6 addr: fe80::68d1:34ff:fe5b:3c99/64 Scope:Link
" {: Y/ D8 }) kUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1  G6 n* n9 z# b1 V5 n9 g
RX packets:0 errors:0 dropped:0 overruns:0 frame:0: b. B. a2 p" L% J
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
0 I) h  j& I; r# S1 bcollisions:0 txqueuelen:0
+ m# h. E2 Z" \8 V( h0 J5 p+ d8 ]; zRX bytes:0 (0.0 B) TX bytes:468 (468.0 B)


: M- _6 \2 N# Z! ?3 n

下面来ping一下ns1中的eth0网卡ip10.0.0.100感受一下:

~# ping 10.0.0.100
( p' y9 G9 Q" V* g/ `5 [PING 10.0.0.100 (10.0.0.100) 56(84) bytes of data.
  n6 x' w! w- y64 bytes from 10.0.0.100: icmp_req=1 ttl=64 time=0.200 ms3 P) M. t+ ?7 {7 m
64 bytes from 10.0.0.100: icmp_req=2 ttl=64 time=0.042 ms

嗷嗷!又通了!

我们进入ns1往10.0.0.1来ping一下:

~# ip netns exec ns1 ping 10.0.0.1
1 A1 R9 e# K/ FPING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
- k! o# Q8 D$ ?# v9 H  t64 bytes from 10.0.0.1: icmp_req=1 ttl=64 time=0.057 ms4 z6 e' i. k% x* d: m$ j5 C* Q
64 bytes from 10.0.0.1: icmp_req=2 ttl=64 time=0.063 ms

嗷嗷!是通的!

但是现在ns1中的网络还访问不到外网,那么如何才能让ns1中的网络可以访问到外面的世界呢?

有点晚了,请听下回分解!感兴趣的同学可以这里评论留言给我,或者看博客左上方的微博地址给我at一下。:-)

9 ~  |4 m0 Q* c, z; l% e% F

常用的namespace的命令:

, F% C/ d- ^7 `3 Y3 n5 {7 e

1. 添加一个namespace

sudo ip netns add [name]


5 ~- f  b7 {5 s! a# {5 X, @5 ^2 N: b6 o: G7 u3 D5 r; W" `

2. 在namespace中启用一个设备

sudo ip netns exec   [name]  ip link set lo up

! s8 N% L! i, q* j# }! g+ w
  o. \6 f, p, Q

3. 在namespace中新加一个设备

sudo ip link set  [dev-name]   netns  [name]

启用:

sudo ip netns exec   [name]  ip link set [dev-name] up

: E9 o$ {3 O1 ?% K
) q  B6 j$ Z" `' G, K( y

4. 查看指定namespace中指定设备的参数信息

sudo ip netns exec  [name] ip addr show   [dev-name]   permanent scope global

7 J6 s0 |& f9 p" M9 `$ O% {6 Q

6 P$ H: e# M, N+ L* ?! a. E' a

5. 为namespace中指定设备设置ip

sudo ip netns exec   [name]  ip -4 addr add 192.168.1.2/24 brd 192.168.1.255 scope global dev   [dev-name]  


6 {9 a5 a6 k7 s& j- x. H2 J
8 |- m2 q* e" H% w: d

6.查看所有network namespace

ip netns list


' a9 @* z  g2 \" o, O$ r% |8 m& ]5 _

7.ping虚拟机实例

ip netns exec [name] ping 192.168.1.3


* A. `8 q, L# n: }4 q6 J
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-9 00:02 , Processed in 0.072894 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

快速回复 返回顶部 返回列表