易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 3964|回复: 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
# s, m# ~' p% x* k/ plo Link encap:Local Loopback
$ A3 c$ W8 E% i% a! z0 xLOOPBACK MTU:16436 Metric:1% i5 C! N+ |6 D$ r1 }
RX packets:0 errors:0 dropped:0 overruns:0 frame:0: h+ n0 Y2 r1 w9 n0 v& s
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
7 w+ v% _+ I: C& z  Ecollisions:0 txqueuelen:0
- r9 B! b4 b$ t9 x. s2 A0 URX 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 -a
# j2 U; l6 Z$ |* x- {2 |: G! F; Z6 plo Link encap:Local Loopback) U+ D2 R& }' x) i. G* I
LOOPBACK MTU:16436 Metric:1& u! z6 k8 o9 n9 `+ O
RX packets:0 errors:0 dropped:0 overruns:0 frame:0! c) b# p4 ^+ c  ]9 [  t0 r# z
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
4 ]* x6 h  P5 S' S+ e( y* zcollisions:0 txqueuelen:0
+ I. y% j) c1 S3 d5 MRX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

ns1-vnic Link encap:Ethernet HWaddr 92:69:39:f3:b3:be
2 j5 c$ k2 B7 j0 A  L" sBROADCAST MULTICAST MTU:1500 Metric:1# n- C7 O- p) H+ P3 N# h
RX packets:0 errors:0 dropped:0 overruns:0 frame:02 y% [  A/ t& c& q+ M$ F. C/ L
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
% b; }8 H3 t4 S  x- l: Fcollisions:0 txqueuelen:1000( O; z2 z; U& }( k
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

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

ip link set ns1-vnic name eth04 g$ s; A6 e$ b# q5 y3 o
# ifconfig -a
/ m- n7 f. U; |. D( `4 eeth0 Link encap:Ethernet HWaddr 92:69:39:f3:b3:be# T  W% O* Q/ t* p
BROADCAST MULTICAST MTU:1500 Metric:1. {1 a: t. Y, z  Y) A+ A) L0 e
RX packets:0 errors:0 dropped:0 overruns:0 frame:0- S; E$ e$ G: T+ w. u8 Z; t6 ?9 q+ |, `
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0* Z/ R5 P6 X: x; ^
collisions:0 txqueuelen:1000* v5 J. @% w! |6 H9 x
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

lo Link encap:Local Loopback
& o. q% C. k% o# ^3 r* [, ~, }) eLOOPBACK MTU:16436 Metric:1$ i& o4 n+ m* P9 c7 q
RX packets:0 errors:0 dropped:0 overruns:0 frame:0! B( ?/ w# {. g: ^! T$ b, F
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
$ d! t: X8 f& U7 n6 j0 rcollisions:0 txqueuelen:0
0 T) C0 {1 f2 N( lRX 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
& o8 ]3 b; q  x1 \# ifconfig+ y& e5 c; F" u9 f* H) b5 Q
eth0 Link encap:Ethernet HWaddr 92:69:39:f3:b3:be
6 i, c  P7 ~  g% g4 ?9 \1 _; binet addr:10.0.0.100 Bcast:0.0.0.0 Mask:255.255.255.0
# L5 |! W- t( X* c3 U& y7 |, PUP BROADCAST MULTICAST MTU:1500 Metric:1' S0 x& K" I# V9 I+ w9 Z
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
3 \* d' j. _& u. QTX packets:0 errors:0 dropped:0 overruns:0 carrier:0
8 W+ y* s: m+ y; D0 Z4 u, W4 _/ s6 }collisions:0 txqueuelen:1000
& s' @* N2 a* e$ D8 }% pRX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

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

# ip link set lo up' v4 n8 q0 B. I
root@ubuntu:~# ping 10.0.0.100
( a! O2 R, m7 q2 ]) IPING 10.0.0.100 (10.0.0.100) 56(84) bytes of data.
( W9 S! e. e. }2 Y. V8 Z, |64 bytes from 10.0.0.100: icmp_req=1 ttl=64 time=0.072 ms
; o( l1 z9 ^$ s8 f2 c64 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 testbr9 H" S$ J" m/ |+ Z$ a
testbr Link encap:Ethernet HWaddr 6a:d1:34:5b:3c:999 C4 E- l% ~( j! k: [6 A+ k
inet addr:10.0.0.1 Bcast:0.0.0.0 Mask:255.255.255.0
% _4 M. d  m! c1 E- A& Iinet6 addr: fe80::68d1:34ff:fe5b:3c99/64 Scope:Link
4 P' J6 h) S1 \( @* \UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
! k6 X4 J) U! Q& `2 i. }: aRX packets:0 errors:0 dropped:0 overruns:0 frame:0
7 A" G2 L9 U- N% uTX packets:6 errors:0 dropped:0 overruns:0 carrier:0- B7 R" k$ s4 M$ P: V, g
collisions:0 txqueuelen:0
. c& y+ [. E' b/ n2 z7 yRX bytes:0 (0.0 B) TX bytes:468 (468.0 B)

& R! U5 g4 `! }' J4 M

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

~# ping 10.0.0.1005 g( I0 G) s0 S
PING 10.0.0.100 (10.0.0.100) 56(84) bytes of data.5 G, u6 K, [0 I0 y7 W
64 bytes from 10.0.0.100: icmp_req=1 ttl=64 time=0.200 ms
5 A+ l" j2 n! `7 R( o: e64 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
* N0 J6 N% [7 B# F2 |8 YPING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.2 |" H! G0 S1 T  a0 F
64 bytes from 10.0.0.1: icmp_req=1 ttl=64 time=0.057 ms- c3 t/ z* _; d* |
64 bytes from 10.0.0.1: icmp_req=2 ttl=64 time=0.063 ms

嗷嗷!是通的!

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

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


. L  J0 J5 i6 `- s; Y6 n4 i- w

常用的namespace的命令:

8 [0 |5 y3 o) l( Q5 D, I: X

1. 添加一个namespace

sudo ip netns add [name]

( E; ^6 V! [. H5 [0 _! V
* I- ^# i4 u  N

2. 在namespace中启用一个设备

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

% }6 r& ~  p' L0 B
5 @+ U+ n3 v- A2 Y9 `+ d

3. 在namespace中新加一个设备

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

启用:

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


; }% ], P2 r' c: \& V- m4 f3 _$ X: l. ]! L8 d; Z: m

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

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


$ S6 ~# k/ s. ^- a! v$ R6 p  h- G) T: S- H0 ^

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]  

( {. f/ O0 K. ^

$ E0 R. {2 G" A

6.查看所有network namespace

ip netns list

; K& q  O/ c0 s3 Y' D4 I
+ m& M' \9 s  s7 d; i7 Q4 y1 d& P

7.ping虚拟机实例

ip netns exec [name] ping 192.168.1.3

0 d/ ~* f- P8 H! O* s. P, X7 x
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

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

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

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 点击这里给我发消息

GMT+8, 2026-4-8 12:10 , Processed in 0.050596 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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