목차
Goal
DHCP 설정으로 인하여 가상머신이 재부팅될 때 기존 IP가 계속해서 달라져 연결된 애플리케이션의 IP를 수정해줘야하는 일이 발생했다. 따라서 DHCP를 통해 IP 주소를 할당받지 않고, 수동으로 부여함으로써 외부에서 일관되게 가상머신으로 연결될 수 있도록 하고자 했다.
사용 애플리케이션: UTM
가상머신 OS: Ubuntu
기존 설정 확인
네트워크 인터페이스 상태 확인
ip addr 명령어를 통해 현재 네트워크 인터페이스 및 DHCP 확인
•
아래와 같은 결과를 얻을 수 있음
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: [네트워크 인터페이스]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether [장치의 MAC 주소] brd ff:ff:ff:ff:ff:ff
inet [사설 IP 주소]/24 metric 100 brd [브로드캐스트 주소] scope global dynamic [네트워크 인터페이스]
valid_lft [유효 기간] preferred_lft [선호 기간]
inet6 [IPv6 주소]/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft [유효 기간] preferred_lft [선호 기간]
inet6 fe80::[장치의 MAC 주소]/64 scope link
valid_lft forever preferred_lft forever
Plain Text
복사
•
dynamic 키워드를 통해 현재 IP가 DHCP를 통해 동적으로 할당되고 있음을 확인
Netplan 설정 확인
/etc/netplan/ 디렉토리의 설정 파일에서 가상머신의 네트워크 설정을 관리 (해당 config 파일 이름은 다를 수 있음) → /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by the datasource. Changes
# to it will not persist across an instance reboot. To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
[네트워크 인터페이스 이름]: # 예: enp0s1
dhcp4: true
version: 2
YAML
복사
•
주석: 해당 파일이 Cloud-init에 의해 생성되었음을 나타내며, 파일을 직접 수정하여도 인스턴스를 재부팅할 경우 변경이 유지되지 않을 수 있음을 나타냄
•
Network Configuration
◦
ethernets - 이더넷 인터페이스에 대한 설정
◦
enp0s1 - 네트워크 인터페이스 이름 (확인된 네트워크 인터페이스 이름에 맞춰야 함)
◦
dhcp4: true - enp0s1 인터페이스가 DHCP를 통해 IPv4 주소를 자동으로 할당 받도록 지정
◦
version - 현재 사용 중인 Netplan의 설정 파일 버전
고정 IP 설정
2.1) Cloud-init 비활성화
50-cloud-init.yaml 이 아니라 00-installer-config.yaml 파일이 있는 경우는 안해도 되는 것 같다.
/etc/netplan/50-cloud-init.yaml 파일을 변경 및 설정해도 재부팅마다 초기화될 수 있기 때문에 Cloud-init의 네트워크 구성 기능을 비활성화해야한다. 비활성화 방법 /etc/netplan/50-cloud-init.yaml 에 나온 내용을 따르면 된다.
•
/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg 파일 생성
network: {config: disabled}
YAML
복사
2.2) Netplan 설정
dhcp 설정을 주석처리하고, 고정 IP를 추가한다.
•
vi /etc/netplan/50-cloud-init.yaml
•
vi /etc/netplan/00-installer-config.yaml
network:
ethernets:
[네트워크 인터페이스 이름]: # 예: enp0s1
# dhcp4: true
addresses:
- [사설 IP 주소]/24 # 예: 192.168.67.3
routes:
- to: 0.0.0.0/0
via: [게이트웨이 주소] # 예: 192.168.67.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
version: 2
YAML
복사
•
addresses: 고정 IP 주소 설정
•
routes: 네트워크 설정에서 특정 경로를 정의할 때 사용. 패킷이 어떤 경로를 통해 이동할지 지정
◦
to
▪
목적지 주소. (패킷 도달 대상)
▪
0.0.0.0/0은 모든 IP 주소를 대상으로 하는 기본 경로 (모든 외부 트래픽을 처리하는 경로)
◦
via
▪
패킷이 해당 목적지로 가기 위해 거쳐야 할 게이트웨이 주소
▪
일반적으로 로컬 네트워크의 라우터 또는 외부 네트워크로 나가는 경로의 IP 주소가 됨
▪
게이트웨이 주소는 route -n 명령어로 확인 가능
•
nameservers: DNS 서버 주소 설정
◦
도메인 이름을 IP 주소로 변환하는 데 사용되며, 인터넷에서의 네트워크 통신이 원활하게 이뤄지도록 함
◦
Google Public DNS: 8.8.8.8 및 8.8.4.4
◦
Cloudflare DNS: 1.1.1.1 및 1.0.0.1
◦
OpenDNS: 208.67.222.222 및 208.67.220.220
2.3) 설정 적용
sudo netplan apply
Bash
복사
2.4) TroubleShooting
수정한 netplan 파일을 적용하려 했지만 아래와 같은 경고로 인해 진행되지 않았다:
WARNING:root:Cannot call Open vSwitch: ovsdb-server.service is not running.
따라서 Open vSwitch 서비스를 활성화 시켜주었다.
2.4.1) Open vSwitch 활성화
# 설치 확인
dpkg -l | grep openvswitch
# 미설치 시 설치 진행
sudo apt update
sudo apt install openvswitch-switch
# 서비스 시작
sudo systemctl start openvswitch-switch
sudo systemctl enable openvswitch-switch
Bash
복사
2.4.2) 설정 재적용
sudo netplan apply
Bash
복사
적용 확인
1.
ip addr 명령어를 통해 네트워크 인터페이스 및 DHCP 확인 + 본인이 지정한 IP인지 확인
•
기존 네트워크 인터페이스에 dynamic이 확인됨 (9번째 줄)
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: [네트워크 인터페이스]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether [장치의 MAC 주소] brd ff:ff:ff:ff:ff:ff
inet [사설 IP 주소]/24 metric 100 brd [브로드캐스트 주소] scope global **dynamic** [네트워크 인터페이스]
valid_lft [유효 기간] preferred_lft [선호 기간]
inet6 [IPv6 주소]/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft [유효 기간] preferred_lft [선호 기간]
inet6 fe80::[장치의 MAC 주소]/64 scope link
valid_lft forever preferred_lft forever
Plain Text
복사
•
수정 후 dynamic 키워드가 없어짐
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: [네트워크 인터페이스]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether [장치의 MAC 주소] brd ff:ff:ff:ff:ff:ff
inet [사설 IP 주소]/24 brd [브로드캐스트 주소] scope global [네트워크 인터페이스]
valid_lft forever preferred_lft forever
inet6 [IPv6 주소]/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft [유효 기간] preferred_lft [선호 기간]
inet6 fe80::[장치의 MAC 주소]/64 scope link
valid_lft forever preferred_lft forever
Plain Text
복사
2.
/etc/netplan 확인
cloud-init으로 인해 configuration 파일의 수정이 비활성화되었었는지 확인