Ubuntu 18.04 이상 Netplan을 사용한 Static IP 설정

Ubuntu 18.04 이상 Netplan을 사용한 Static IP 설정

Ubuntu는 한 3년전부터인가 CentOS보단 개인적으로 더 주력으로 많이 사용했던거 같다.

16.04 LTS 나올때부터 꾸준히 쓰긴 했었는데 어느샌가 벌써 18.04가 LTS 버전으로 나왔다.

16.04로 바꿔서 쓸때도 systemctl 때문에 한동안 매우 힘들었는데 18.04 올라가고 벌써부터 바뀐 것들이 너무 많다. 뭐 이리 배울게 많아 ㅠㅠ

어찌됐든 또 잊어버리기 전에 다음에 헤매지 않게 기억해본다.

Static IP 설정

첫번째 난관은 네트워크 인터페이스 설정이다.

17.10부터 네트워크 인터페이스 설정이 NetPlan이라는 새로운 네트워크 설정 시스템으로 변경된 것 같다.

확실히 기존의 인터페이스 설정(/etc/network/interfaces)보다는 더 간결하고 쉽게 YAML을 사용하여 관리가 가능하다.

/etc/netplan/*.yaml

해당 위치에 인터페이스 설정이 가능하고 NetworkManagernetworkd 두개의 렌더러를 사용할 수 있다.

NetworkManger 렌더러를 사용하는 경우에는 X Window 환경에서만 사용하고 나머지 경우는 networkd 렌더러를 사용하면 된다.

네트워크 인터페이스 확인

우선 ifconfig -a 를 통해 설정할 네트워크 인터페이스를 확인한다.

hkwon@canary-test-server:~$ ifconfig -a
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 fe80::a00:27ff:fe57:92b1  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:57:92:b1  txqueuelen 1000  (Ethernet)
        RX packets 375  bytes 314494 (314.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 178  bytes 18901 (18.9 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s8: flags=4098<BROADCAST,MULTICAST>  mtu 1500
        ether 08:00:27:22:8f:0b  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 28  bytes 2208 (2.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 28  bytes 2208 (2.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s8 인터페이스를 NetPlan을 통해 설정해보자.

netPlan을 통한 Static IP 설정

아마 디폴트로 세팅했다면 아래와 같이 기본 인터페이스 설정이 존재한다.

/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.
# 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:
        enp0s3:
            addresses: []
            dhcp4: true
            optional: true
    version: 2

dhcp로 설정된 enp0s3 인터페이스가 보일 것이다.

새로운 인터페이스인 enp0s8번을 설정해보자

$ sudo vi /etc/netplan/01-netcfg.yaml

나는 virtualbox 호스트네트워크를 사용한 인터페이스를 추가해서 ethernets 섹션의 ip192.168.56.100/24로 설정하고 기타 아래와 같이 gatewaydns 정보를 입력한다.

# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
 version: 2
 renderer: networkd
 ethernets:
   enp0s8:
     dhcp4: no
     dhcp6: no
     addresses: [192.168.56.100/24]
     gateway4: 192.168.56.1
     nameservers:
       addresses: [8.8.8.8,8.8.4.4]

다른 섹션은 볼 필요 없고 ethernets 섹션만 정확하게 설정하고 저장한다.

  • dhcp4 : IPv4 dhcp 설정
  • dhcp6 : IPv6 dhcp 설정
  • addresses : ,로 구분한 IP 멀티로 가능
  • gateway4 : IPv4 gateway 설정
  • nameservers : dns 설정 ,로 구분 멀티로 설정 가능 [생략 가능]

설정 재적용

새 설정을 적용하려면 아래의 명령어를 실행한다.

$ sudo netplan apply

다시 ifconfig -a 해서 네트워크 인터페이스 정보를 확인한다.

enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 fe80::a00:27ff:fe57:92b1  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:57:92:b1  txqueuelen 1000  (Ethernet)
        RX packets 1566  bytes 400006 (400.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 980  bytes 153691 (153.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.56.100  netmask 255.255.255.0  broadcast 192.168.56.255
        inet6 fe80::a00:27ff:fe22:8f0b  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:22:8f:0b  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5  bytes 386 (386.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 40  bytes 3108 (3.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 40  bytes 3108 (3.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

정상적으로 변경된 것을 확인 할 수 있다.

MacBook-Pro:~ hkwon$ ssh hkwon@192.168.56.100
The authenticity of host '192.168.56.100 (192.168.56.100)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.56.100' (ECDSA) to the list of known hosts.
hkwon@192.168.56.100's password:
Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-22-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
...

외부에서도 정상적으로 세팅된 IP로 접속 가능한 것을 볼 수 있다.

Read more

나의 프로그래밍 폰트 사용 일대기

나의 프로그래밍 폰트 사용 일대기

시작은 2003년 이제 막 프로그래머로써 첫발을 내딛을 때부터 나는 프로그래밍 폰트에 대해서 관심이 많은 편이었다. 화면 붙잡고 매일 글자들과 씨름하는 직업이다보니 당연하게도 좀더 눈에 잘 보이고, 보기에 좀더 미려하고 조화스러운 폰트를 찾는 것이 어찌보면 약간 본능(?)적으로 관심을 가졌던게 아닌가 싶기도 하고 말이다. 최근까지도 이 주체할 수 없는 본능에 따라

By Kevin H. Kwon
Istio 를 통한 path(url) 기반 Local Rate Limit 적용

Istio 를 통한 path(url) 기반 Local Rate Limit 적용

몇 년 전인지는 기억나진 않지만 Rate Limit 적용은 항상 애플리케이션 쪽에서 처리하는 것이 당연하다는 것이 주된 의견이었다. 그래서 그때 당시 Bucket4J 를 통해서 Spring 쪽에서 처리하고 했던 기억이 있다. 이제는 당연하게도 Istio와 같은 Service Mesh쪽에서 처리하는 것이 응당 맞다고 생각되는 것이 개발 세상이 이제 점점 더 클라우드향으로 이동된다는 느낌이다. 강력한

By Kevin H. Kwon
Istio를 통한 header기반 API 라우팅/호출 시 cors preflight request 이슈 트러블슈팅 기록

Istio를 통한 header기반 API 라우팅/호출 시 cors preflight request 이슈 트러블슈팅 기록

현재 개발하고 있는 일부 컨테이너 기반의 서비스들을 Istio를 통해 서비스들을 구성하고 트래픽을 관리하고 있다. 이때 컨테이너 서비스가 같은 규격이 여러개가 같은 url과 port를 할당 받아서 사용해야는 애로 사항이 있어 Istio에서 header 기반으로 특별한 헤더가 있는 경우에만 라우팅이 될 수 있도록 구성하고 테스트를 진행했었다. Istio Request Routing 예제와 같이 header

By Kevin H. Kwon