[실습]Linux VM 네트워크 구성해보기
bridged:DHCP, 실제 IP를 할당해준다, 실제 IP를 할당하므로 부하를 준다.
NAT: 매핑, 가상의 IP와 실제 정적IP를 매핑해준다.
host-only: host와 연결되는 네트워크로, 본 실습에서는 host와 vm간의 ssh연결을 위해 사용할 것이다.
LAN Segment: 내부 네트워크, 내부에서 사용하는 네트워크다.
아래는 실습 구조다.
위의 그림과 달리, VM1, 2, 3 모두 NAT 설정이 되어있다면 모두 개별의 랜이겠지만,
VM1에서만 NAT설정이 되었기 때문에 주요한 랜은 하나이며 내부 네트워크가 각기 다른 VM을 이어주고 있다.
그림과 같은 구조를 만들어본다.
VM1
host-only, NAT, LAN1(내부네트워크)
VM2
Add탭을 누르고, 네트워크 어댑터를 추가한뒤 다음과 같이 세팅을 해준다.
host-only
Adapter1는 LAN2 (내부네트워크)
Adapter3는 LAN1 (내부네트워크) 이다. (실습은 위 아래를 바꾸어 했으나, 실제로는 어댑터1이 LAN1, 어댑터3이, LAN2일 것을 권장한다. 헷갈린다.)
VM3
LAN2 (내부네트워크)와 host-only를 사용한다.
그리고 내부 ifconfig를 하면, 네트워크 어댑터에 따른 정보들이 나온다.(OS 종류마다 네트워크 인터페이스가 다르다)
Route 설정, 10.0.2.0(LAN2) 로 넘어가는 요청은 모두 10.0.1.2(VM2)로 보낸다.
Address 부분은 ifconfig 할 때 ens38 부분의 ip addr를 10.0.1.1로 세팅한다
VM2
모든 요청은 10.0.1.1(VM1)로 보낸다.
ip는 LAN1 인터페이스는 10.0.1.2, LAN2 인터페이스 ip addr를 10.0.2.2로 설정한다.
VM3
다음과 같이 세팅한다.
세팅하고 나면 VM1-VM2 / VM2-VM3 끼리 ping이 된다.(내부네트워크 연결이 되어었으므로)
또한, 어느정도 route 설정을 했기 때문에, VM1-VM3과도 연결이 될 것이다. (gateway와 route 설정 등을 통해서)
하지만 연결이 되지 않을 것이다.
이때 패킷포워딩이 필요하다. VM1-VM2끼리 통신할 때에는 필요가 없으나, VM1과 VM3 간의 패킷 포워딩이 필요하다
VM1
패킷포워딩(ip 포워딩)
sudo sysctl -w net.ipv4.ip_forward=1
sudo echo 1 > /proc/sys/net/ipv4/ip_forward
둘중에 아무 커맨드나 사용해도 된다.
포워딩은 iptables의 input, output chain 말고도 포워딩하는 chain이 있다. 이 체인으로 input, output 을 거쳐가지 않고 forward로 거쳐갈 수 있다.
sudo iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
내부 네트워크의 VM이 외부 네트워크(인터넷)와 통신할 때 자신의 개인 IP 주소를 숨기고, 대신 외부 인터페이스(ens33)의 IP 주소를 사용하여 통신하게 할 수 있는 명령어.
VM2
sudo sysctl -w net.ipv4.ip_forward=1
이 커맨드를 사용하여 두 네트워크 LAN1, 2 간의 포워딩을 해준다.
그러면 vm3에서도 NAT없이 인터넷을 연결할 수 있다.