네트워크 인터페이스에 고정아이피 설정하기

서버를 설정하다보면 퍼블릭 아이피 하나를 할당 받아서 고정적으로 사용할 수도 있고, 혹은 내부망에서 프라이빗 아이피를 설정해야할 수도 있다.

예를 들어 하둡 클러스터를 구축하려는데, 단순히 운영중인 dhcp 서버에서 동적으로 할당해주는 주소를 받아 사용할 경우, 네트워크 변경이 일어날 때마다 주소가 달라질 수 있다.

그렇기 때문에 각 노드에 달린 네트워크 인터페이스들(클러스터에 연결될)에 고정적인 프라이빗 대역의 주소를 할당해놓을 수 있다.

기존에는 iptables로 직접, 혹은 /etc/network/interfaces 파일과 ifup/down 등의 명령어를 활용해 인터페이스들을 관리했지만, 최근(Ubuntu 18.04 이후)에는 netplan 이라는 시스템이 등장했고, yaml 을 활용해 좀 더 편리하게 네트워크를 관리할 수 있다.

NetPlan 설정은 /etc/netplan 아래에서 .yaml 형식으로 가능하다.

따라서 우리가 인터페이스 고정아이피를 박아주기 위해서는 아래와 같이 파일을 만들어서 저장하면 된다.

sudo vi /etc/netplan/foo.yaml

network:
    version: 2
    renderer: NetworkManager
    ethernets: 
        [인터페이스명]: 
            addresses: [192.168.0.90/24]
            dhcp4: no
            gateway4: 192.168.0.100
            nameservers:
                addresses: [8.8.8.8,8.8.4.4]

netplan을 적용시킬 때, /etc/netplan 아래에 있는 모든 yaml 파일들을 읽기 때문에, 파일명이 달라지는 것은 상관 없다.

먼저 renderer 에는 NetworkManager 혹은 networkd 를 사용할 수 있다.

NetworkManager는 일반적으로 데스크탑에서, 즉 X-Window 환경에서 사용하며, 무선네트워킹 등 네트워크 변경이 자주 일어날 때 사용하는 것이 좋다.

[인터페이스명]에는 시스템에 등록된 인터페이스의 장치명을 넣어줘야 하는데, 이는 ls /sys/class/net, ifconfig -a, ip link, netstat -i, lshw -short -c network 등 여러 방법으로 확인 가능하다.

bconfiden2@desktop:~$ ls /sys/class/net
eth0  lo

현재 인터페이스는 하나로 eth0 이라는 이름을 갖고 있으며, lo 인터페이스는 loopback의 줄임말로, 시스템이 자기 자신과 통신을 하기 위한 가상의 장치라고 볼 수 있다.

고정아이피로 설정해줄 인터페이스를 정했으면, 해당 인터페이스에 할당해줄 주소를 addresses: 에 작성한다.

주소를 지정할 때 대괄호를 넣지 않는건 옛날 방식으로, 일반적으로는 대괄호를 넣는걸 추천한다.

그외에도 dhcp(고정아이피 설정시 반드시 no/false), 디폴트 게이트웨이, dns서버 등의 설정들을 넣어줄 수 있다.

설정파일 편집이 끝났다면, sudo netplan apply를 통해 netplan 을 새로 적용시켜주고, 문제없이 적용까지 완료될 경우에는 hostname -I로 아이피를 확인해볼 수 있다.

bconfiden2@desktop:~$ sudo netplan apply
bconfiden2@desktop:~$ hostname -I
192.168.0.90