네임스페이스를 줄 수 있다. 



$ ip netns add ns1



또 실행하면 실제 network namespace의 위치를 알려주는 에러(?!)가 발생한다.


$ ip netns add ns1

Cannot create namespace file "/var/run/netns/ns1": File exists



확인한다.


$ ip netns

ns1

$ ip netns list

ns1

$ ip netns list ns1

ns1



삭제하려면 다음 커맨드를 실행한다. 


$ ip netns delete ns1

$ ip netns list




하나의 가상 ethernet을 생성하고 peer로 하나 생성한다.


$ ip link add vireth0 type veth peer name virteth1

$ ip link list

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 50000

    link/ether fa:16:3e:77:ea:d4 brd ff:ff:ff:ff:ff:ff

3: virteth1@vireht0: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000

    link/ether c2:d7:7a:23:90:7b brd ff:ff:ff:ff:ff:ff

4: vireht0@virteth1: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000

    link/ether 56:48:fa:8d:53:58 brd ff:ff:ff:ff:ff:ff

    

    


만약 실수 했다면 ip link del로 삭제할 수 있다. 


$ ip link del vireth0


네트워크 namespace 에는 단지 virtual Ethernet(veth)만 할당할 수 있다.


이전에 추가한 네임스페이스에 vireth0을 연동한다. 


$ ip link set vireth0 netns ns1



ip link list를 실행하면 vireth0이 안보인다. 글로벌 공간에서 ns1로 이동했다. virteth1만 남아 있다. 


$ ip link list

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 50000

    link/ether fa:16:3e:77:ea:d4 brd ff:ff:ff:ff:ff:ff

3: virteth1@if12: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000

    link/ether aa:35:8b:aa:ae:62 brd ff:ff:ff:ff:ff:ff link-netnsid 0

    



ip netns list를 실행하면 먼가가 바뀌었다. id가 0이다. 


$ ip netns list

ns1 (id: 0)



ns1에서 ip link list를 실행한다. 여기에 vireth0이 있다. 


$ ip netns exec ns1 ip link list

1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

3: vireth0@if11: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000

    link/ether 52:eb:a4:5b:33:d3 brd ff:ff:ff:ff:ff:ff link-netnsid 0

    

    



새로운 ip를 부여한다. 


$ ip netns exec ns1 ifconfig vireth0 192.168.1.1/24 up



확인한다. DOWN 상태에서 LOWERLAYERDOWN 상태로 바뀌었다. 


$ ip netns exec ns1 ip link list

1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

12: vireth0@if11: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state LOWERLAYERDOWN mode DEFAULT group default qlen 1000

    link/ether 52:eb:a4:5b:33:d3 brd ff:ff:ff:ff:ff:ff link-netnsid 0

    


ip 주소를 확인하면 192.168.1.1로 되어 있음을 확인할 수 있다. 


$ ip netns exec ns1 ip addr list

1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

12: vireth0@if11: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state LOWERLAYERDOWN group default qlen 1000

    link/ether 52:eb:a4:5b:33:d3 brd ff:ff:ff:ff:ff:ff link-netnsid 0

    inet 192.168.1.1/24 brd 192.168.1.255 scope global vireth0

       valid_lft forever preferred_lft forever




ns1의 vireth0과 글로벌의 virteth1을 서로 짝이라서 virteth1의 네트워크를 설정한다. 


$ ifconfig virteth1 192.168.1.2/24 up


이제 글로벌영역에서 가상 네임 네트워크 ns1으로 ping을 실행할 수 있다. 


$ ping 192.168.1.1

PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.

64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.043 ms

64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.039 ms



Posted by 김용환 '김용환'

댓글을 달아 주세요