배경
일을 하다보니, 간혹 subnet이 하나라 아쉬운 순간이 이만 저만이 아니다. 가령 연구실에서 쓰는 ESXi 테스트베드 대역 중 하나는 10.0.20.0/24 라는 대역인데, 여기에 사람들이 몰리다 보니, 나 혼자만의 subnet이 필요하다...
하지만, 연구실에서 교수님께 라우터를 사달라하면 교수님이 너무나 좋아하시고, 일을 더 시킬게 분명하기에, 조용히... 그냥 서버 하나를 가지고 NAT를 만들어보려고 한다.
그리고, 내가 여간 게으른 성격이 아니기에, 해당 서버에서 DHCP 서버도 같이 동작시켜서, 자동으로 IP 할당도 해보려 한다. (todo)
목표
- Subnet: 10.0.30.0/24
- Gateway: 10.0.30.1
+ DHCP 서버까지 (todo)
OVS 브릿지 설정
실제 서버(VM)의 인터페이스는 ens160 인터페이스 하나 뿐이다. 따라서, 가상의 GW IP를 부여하기 위해, OVS를 사용할 것이다. 언제나 그렇듯, OVS는 최고다...!
net-tools 설치 이유는, 간혹가다 ifconfig가 설치 안된 minimized 버전 우분투 때문이다... 늘 패키지 이름을 까먹어서 추가해놓았다...!
sudo apt-get install openvswitch-switch net-tools -y
sudo ovs-vsctl add-br eth1
sudo ifconfig eth1 10.0.30.1
sudo ifconfig eth1 up
간단하게, eth1이라는 이름의 브릿지를 만들어주고, 10.0.30.1 이라고 IP를 부여해주자.
sysctl -w net.ipv4.ip_forward=1
또한, 귀찮은 일들을 피하기 위해, ipv4 포워딩을 진행하자. (물론 이거 잘못 설정하면 물리 스위치가 터지는 즐거운 경험도 얻을 수 있다)
그냥 좀더 썰을 풀자면, 내가 ovs에 익숙치 않은 상태에서 ip_forward=1을 설정해버렸고, 이후 패킷이 죽어라 루프를 돌았다. 그러다가 실제 우리 건물의 스위치에 부하가 (얘기를 들어보니, 자정부터 다음날 오후 1시까지 CPU로드가 100%라고 했다...) 걸렸고... 정보인프라팀 아저씨들이 연구실 문 따고 오셔서 우리 컴퓨터들의 랜선이랑 전원을 뽑으셨다... 그때 아저씨들께 "엥 저는 모르겠는데욥 ㅎㅎ..."을 하던 기억이 난다...
스위치에 패킷 루프 만든 썰은 많으니 나중에 더 풀어주도록 하겠다..!
GW 테스트
뭐 암튼, 이제 간단하게 해당 IP에 접근 가능한지 다른 VM에서 테스트를 해보자. 해당 VM의 IP는 10.0.20.53으로, 10.0.20.0/24 대역이다.
사실 10.0.30.0/24 에 대한 라우팅 룰이 안적혀 있으므로, 간단한 라우팅 룰을 정해주자.
sudo ip route add 10.0.30.0/24 via 10.0.20.53 dev ens192
ens193인 10.0.20.53에다가 10.0.30.0 에 해당하는 라우팅 룰을 넣어줬다. 덕분에 핑이 잘 간다..!
NAT 및 라우팅 설정
이제 다시 NAT 서버로 돌아가서, 간단하게 iptables를 통한 NAT를 만들어주자
sudo ip route add 10.0.30.0/24 via 10.0.20.55 dev ens192
sudo iptables -t nat -A POSTROUTING -s 10.0.30.0/24 -o ens192 -j MASQUERADE
물론, netfilter로 NAT을 하면 성능이 매우 떨어진다는 사실을 안다... 실제 프로덕션에선 이렇게 쓰면 당연히 안된다..! 정 안되면 나중에 xDP 같은걸 가지고 하면 효율이 좋겠으나, 난 귀찮고 할 시간도 없으므로 스킵한다.
VM 생성
이제, 이 GW를 사용해서 VM을 하나 만들어보자...!
여기서, GW를 방금 만든 것, 그리고 IP를 10.0.30.90으로 만들어보자
이후 Done이 떴으니, 될것 같다...! 이후 설치를 진행하고, 외부 연결을 확인해보자.
IP는 10.0.30.90으로 할당되었다..!
apt-get으로 vim도 설치할 수 있고,
google 또한 잘 다녀온다!
결론
하지만, 지금처럼 동작하면, 10.0.30.0/24 에 대한 라우팅 규칙을 모든 노드에 추가해줘야하는 귀찮은 일들이 생긴다. 이걸 나중에 해결하고, DHCP 또한 해보려 한다.
'Knowledge > Linux' 카테고리의 다른 글
[Nvidia] nvidia-docker로 localGPT 돌리기 (3) | 2024.01.09 |
---|---|
[DNS] Public DNS 서버 구축 (0) | 2023.06.09 |
[CentOS] 인터페이스 이름 변경 (0) | 2023.06.05 |
[Bind9] Private DNS 서버 + OpenVPN (0) | 2023.06.02 |