배운 내용/리눅스: 클라우드 환경 운영부터 성능분석까지

11월28일 - (실습) namespace - Network 네임스페이스

JooJY 2023. 11. 28. 17:45

새로운 Network 네임스페이스 2개 생성 후 생성된 네임스페이스 간의 네트워크 연결 확인

(Docker의 Bridge 드라이버 형태를 모사한 것)

리눅스의 가상 네트워크 인터페이스

- Bridge : 네트워크 스위치와 같은 역할. 연결된 인터페이스로 패킷을 전달.

ip link add 이름 type bridge

- VETH(Virtual Ethernet) : 로컬 이더넷 터널. 네트워크 네임스페이스 간 연결을 가능하게 함. 항상 페어로 구성됨.

ip link add 이름1 type veth peer name 이름2

ip 커맨드 : 링크를 만들거나 어드레스를 확인하거나 라우팅 정보를 보거나 세팅하거나 하는 다양한 일이 가능함.

과거의 ipconfig == ip addr

ipconfig는 이제 설치해야 사용 가능하다.

ip addr로 확인이 가능하다.

ip 커맨드로 네임스페이스를 만들 수 있다.

ns0, ns1 네임스페이스를 만든다.

# 새로운 네트워크 네임스페이스 생성 
ip netns add ns0
ip netns add ns1

제대로 네임스페이스 생성이 되었나 확인

# 네트워크 네임스페이스 생성 확인
ip netns list

네트워크 네임스페이 안에 어떤 인터페이스가 있는지 확인.

그냥 ip link를 치면 루트 네임스페이스에 있는 루트 네트워크 네임스페이스에 있는 정보가 나온다.

ip link

특정 네트워크 네임스페이스 인터페이스 확인하기

ip netns exec ns0 ip link
ip netns exec ns1 ip link

loopback 디바이스가 하나 기본으로 설치되어 있다.

네트워크 인터페이스 구동시키도록 세팅

(중요하지 않음)

ip netns exec ns0 ip link set lo up
ip netns exec ns1 ip link set lo up

두 네트워크 네임스페이스를 연결하기 위한 네트워크 스위치인 브릿지 만들기

기존에 설치된 브릿지가 있는지 확인하기

# 브릿지 정보 확인
ip link show type bridge

아무것도 안나오면 브릿지가 없는 것이다.

새로운 브릿지 네트워크 인터페이스 생성

# 호스트에 새로운 브릿지 네트워크 인터페이스 생성
ip link add br0 type bridge

br0이라는 브릿지를 생성

만들고 난 다음 구동을 시켜야 한다.

ip link set br0 up

브릿지를 만들면 브릿지 ip가 없는 상태이다.

브릿지에 어드레스를 add 할 것. 주소는 192.168.2.1/24

dev device br0 

ip addr add 192.168.2.1/24 dev br0

ip addr로 확인 - br0에 ip가 들어간 것을 볼 수 있다. ip 활동이 됐다.

ping 날려서 인터페이스가 올랐나 확인

-c 2를 하면 핑을 2번만 날림

ping -c 2 192.168.2.1

네임스페이스 간 연결을 하기 위한 버추얼 이더넷 디바이스 만들기.

이름을 veth0로 하고 type은 veth(버추얼 이더넷), 꼭 peer로 연결해야 한다.

veth0 - ceth0 // veth1 - ceth1 연결한다.

여기까지는 디바이스를 준비하는 과정.

# ip link add 이름1 type veth peer name 이름2
ip link add veth0 type veth peer name ceth0
ip link add veth1 type veth peer name ceth1

이제 연결을 해야 한다.

veth0, veth1 재료를 마스터에 브릿지 br0에 연결

# veth0를 br0에 연결
ip link set veth0 master br0
ip link set veth1 master br0

연결하고 구동시키기.

# veth0 시작
ip link set veth0 up 
ip link set veth1 up

반대편도 연결을 해야 함.

c이더넷 재료를 네트워크 네임스페이스의 ns0에 연결

# ceth*를 ns* 네임스페이스에 연결
ip link set ceth0 netns ns0
ip link set ceth1 netns ns1

ns0 네임스페이스 안에 들어가서 구동을 해야 한다.

# ceth* 시작 
ip netns exec ns0 ip link set ceth0 up
ip netns exec ns1 ip link set ceth1 up

구동 상태 확인하기

ip netns exec ns1 ip link

이더넷 스페이스가 업 상태로 해서 올라와 있는데 아직 ip가 없다.

(아니 이것도 그럼 ip netns exec ns1 ip addr을 하는게 맞잖아)

ip 지정하기. 네임스페이스 안에 들어가서 ip 지정해야 한다.

끝자리 1을 브릿지에 할당했으니 2, 3을 지정한다.

# ns*의 ceth* 인터페이스에 IP 할당
ip netns exec ns0 ip addr add 192.168.2.2/24 dev ceth0
ip netns exec ns1 ip addr add 192.168.2.3/24 dev ceth1

다시 ip link 확인

# ns1의 네트워크 인터페이스 확인
ip netns exec ns1 ip addr

ip address 확인

실제로 네트워크 구성이 되었나 핑을 보내보기

# ns0에서 ns1로 연결
ip netns exec ns0 ping -c 2 192.168.2.3

핑이 정상적으로 연결되는 것을 확인