易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 3963|回复: 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
. V$ ~/ j  `/ J. klo Link encap:Local Loopback
3 x; u5 ]* C3 v1 w# {' TLOOPBACK MTU:16436 Metric:1
8 l- I+ |/ N- ]3 vRX packets:0 errors:0 dropped:0 overruns:0 frame:0
9 i( L0 I& E# R! d% W7 {TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
$ m( X1 j0 K4 ]1 H: l* }3 C: acollisions:0 txqueuelen:0
+ W; u2 U; A9 s& S% i3 IRX 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
. a; ]5 j/ d: blo Link encap:Local Loopback
  ^% j  a5 c+ }' I) G4 JLOOPBACK MTU:16436 Metric:1
4 M, n+ g" a# F( v$ M+ x* kRX packets:0 errors:0 dropped:0 overruns:0 frame:0& x4 ~  o+ r  }/ x
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
; b: y% Y) X! {4 Pcollisions:0 txqueuelen:0
! W$ B0 m9 N/ SRX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

ns1-vnic Link encap:Ethernet HWaddr 92:69:39:f3:b3:be
- a( d' J3 p' f6 MBROADCAST MULTICAST MTU:1500 Metric:1
4 B( W, d# {$ q1 ?' G; l$ TRX packets:0 errors:0 dropped:0 overruns:0 frame:0
& f, H9 w+ x2 v3 G, D) \& YTX packets:0 errors:0 dropped:0 overruns:0 carrier:07 W4 o/ O3 [0 u# W: ]& ~
collisions:0 txqueuelen:10003 {. L  E" R: C" J4 Z3 k4 d
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

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

ip link set ns1-vnic name eth0
) F3 e) @7 z5 h1 h* Y# ifconfig -a8 F9 q( Q2 [/ o( a. N
eth0 Link encap:Ethernet HWaddr 92:69:39:f3:b3:be! a0 X/ q5 b7 n; P: C$ G. A2 m
BROADCAST MULTICAST MTU:1500 Metric:1
* f7 r( h8 r5 a5 i8 iRX packets:0 errors:0 dropped:0 overruns:0 frame:0
/ Y6 `: g2 H2 \1 {5 a) O4 m6 p5 f2 YTX packets:0 errors:0 dropped:0 overruns:0 carrier:0  W7 Z, o; D4 f& d$ v; `8 d
collisions:0 txqueuelen:10005 E$ a6 m7 M" f) H! l% z
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

lo Link encap:Local Loopback
& @0 A  X$ |" B' _, KLOOPBACK MTU:16436 Metric:1$ X5 k+ ?! U( b+ Q
RX packets:0 errors:0 dropped:0 overruns:0 frame:04 G: ^  P5 l1 U# n. V
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0+ _0 |* k* a6 U7 l# g
collisions:0 txqueuelen:0* F0 E, H- _0 |' @5 a
RX 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) @8 [  Y, h* [# T) p
# ifconfig  T: J: V) r( \  T! H1 v1 S
eth0 Link encap:Ethernet HWaddr 92:69:39:f3:b3:be  O) X' ~/ e/ z
inet addr:10.0.0.100 Bcast:0.0.0.0 Mask:255.255.255.0, y+ M+ D- a; h# P( c( y4 x0 |2 L& V
UP BROADCAST MULTICAST MTU:1500 Metric:19 k% Q9 I7 a. Y; T5 L2 B
RX packets:0 errors:0 dropped:0 overruns:0 frame:0; K7 ~! i1 X- E8 M+ t0 Q" I
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
9 k/ G; M- v+ _1 o+ o" T, \collisions:0 txqueuelen:1000
. A5 F/ k! I, l9 p# ^RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

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

# ip link set lo up
; [0 D0 l$ F1 C+ {, Wroot@ubuntu:~# ping 10.0.0.100
; z" E) j( J0 c% ~( v/ bPING 10.0.0.100 (10.0.0.100) 56(84) bytes of data.
8 \% \. d7 ?  }/ p64 bytes from 10.0.0.100: icmp_req=1 ttl=64 time=0.072 ms( ]$ l6 @3 V( K! B6 u
64 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
" B1 w* i( a" ftestbr Link encap:Ethernet HWaddr 6a:d1:34:5b:3c:99
" g/ }) e$ l: D" o. finet addr:10.0.0.1 Bcast:0.0.0.0 Mask:255.255.255.0
- d6 `2 [9 i9 I3 ]$ Y/ \inet6 addr: fe80::68d1:34ff:fe5b:3c99/64 Scope:Link
9 O- C$ I5 f) s3 [( Z* XUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
- \' G* X5 b9 ^9 HRX packets:0 errors:0 dropped:0 overruns:0 frame:08 u" v) ]3 ^9 W% S
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0! q4 p; A2 t1 B6 Y3 C/ J3 ?
collisions:0 txqueuelen:0
' M' Y2 J; Z9 J3 n/ j$ f4 WRX bytes:0 (0.0 B) TX bytes:468 (468.0 B)

( e- p( q; O  X

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

~# ping 10.0.0.100
9 z6 j/ U6 G4 M7 L# ]PING 10.0.0.100 (10.0.0.100) 56(84) bytes of data.
6 }1 T0 L  }8 e' |& \64 bytes from 10.0.0.100: icmp_req=1 ttl=64 time=0.200 ms
7 n5 U" U8 f7 I. W64 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; U9 t$ U) D" i+ ^; N. S. [
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
4 t% |- j% k6 r! s9 r) }64 bytes from 10.0.0.1: icmp_req=1 ttl=64 time=0.057 ms/ P4 X- l( O, j0 L, I1 R
64 bytes from 10.0.0.1: icmp_req=2 ttl=64 time=0.063 ms

嗷嗷!是通的!

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

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

# d+ Q9 i6 D) z$ q& b% |0 ~5 _1 J

常用的namespace的命令:

4 D* c7 J; A8 y0 a* E2 U' j

1. 添加一个namespace

sudo ip netns add [name]


; @: |9 @& l3 U5 x: K! \
/ Y' B* t0 v9 R  N6 M3 U

2. 在namespace中启用一个设备

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

4 \1 ~8 }4 k* X  \' P( |; d
5 r! U* F8 M" A7 R5 q

3. 在namespace中新加一个设备

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

启用:

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


1 l* C9 @* O# x1 ?1 O5 C
' T7 w  x# w: i. o0 W) M2 e0 @

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

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


: i& G  H+ |; i: C0 O, G5 |, ~) v0 a  |' |% D. v

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]  


5 J2 t& Y* U/ n3 ?4 m0 X
5 d& C, p, R+ F* T$ a6 T

6.查看所有network namespace

ip netns list

3 y1 ^: u# l8 C$ {% d
5 Q' b* o/ k! A' @# [4 |$ N* l

7.ping虚拟机实例

ip netns exec [name] ping 192.168.1.3


4 ^% Y7 k( x$ z5 n
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

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

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

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

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

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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