해당 글은 KT 공유기를 사용한다는 전제 하에 작성 되었습니다.
이번에 라즈베리파이5를 구매했다.
라즈베리파이를 구매하게 된 이유는 토이 프로젝트 목적으로 구매하게 되었다.
클라우드 환경과 고민하던 나는 아직은 미숙한 클라우드 이해도로 인해서 예상치 못한 금액이 나오는 것을 경계하여, 이러한 선택을 하게 되었다.
토이 프로젝트로 WEB 프로젝트를 기획 중이기에 외부에서 접근을 할 수 있게 해야했다.
인터넷은 현재 우리 집에서 사용하는 가정용 WIFI를 포트 포워딩 하여서 사용할 계획이었다.
이 때 여러 레퍼런스를 찾아다니며, 공부를 할 때 라즈베리파이5에서 고정 IP를 설정하는 레퍼런스가 많지 않았다.
그러기에 이번 기회에 라즈베리파이5에서 고정 IP 설정 및 포트 포워딩 방식에 대해서 이야기 해보도록 하자.
먼저 왜 IP를 고정 시키는 것이 필요한지 살펴보자.

일반적으로 공유기를 사용하여 인터넷에 접속하면, 각 기기에 IP를 할당 시켜준다.
이 때 IP를 유동적으로 할당 시켜주기 때문에 해당 기기가 전원을 껐다 키는등으로 인터넷 연결이 끊어지면 다시 유동적으로 할당을 해주게 된다.

위 사진은 실제 KT 공유기에서 IP를 유동적으로 할당 시켜주는 범위다.
위 사진의 범위를 통해 예시를 들어보자.
내가 라즈베리파이에 해당 공유기에서부터 인터넷을 공급 받아서
172.30.1.5라는 IP를 할당 받는다.그래서 나는 해당 IP로 포트 포워딩을 하였다.
그러나 라즈베리파이의 전원을 껐다 키자
172.30.1.88IP를 할당 받게 되어서 다시 포트 포워딩을 해주>어야만 했다.
위 예시를 정리 해보자면, 공유기를 통해서 인터넷에 접속 하는 경우 라즈베리파이의 IP는 계속 바뀌게 됨으로, 이를 고정할 필요가 있다.
IP를 고정 하기 위해서는 무엇이 필요할까?
아래 두가지 과정이 필요하다.
먼저 1단계 부터 같이 살펴보자.
DHCP란?
쉽게 설명해서 HOST의 IP 주소와 각종 TCP/IP 프로토콜의 기본 설정을 클라이언트에게
자동으로 제공해주는 프로토콜이다.
우리는 DHCP의 범위를 조절하기 위해 아래의 주소들에 먼저 접속 해야 한다.

접속하면 위와 같은 페이지가 뜰 것이다.
계정을 별도로 설정 하지 않았다면 기본 계정 정보는 다음과 같다.
아이디 : ktuser
비밀번호 : homehub

접속 후 메뉴 중 장치 설정 > 네트워크 관리 > LAN 연결 설정에 접속한다.
이 중 색칠 되어있는 DHCP 코넷 IP 사용 범위의 시작 부분을 3부터 시작하게 하자.
이렇게 되면 공유기가 IP를 할당 할 때는 172.30.1.3~ 172.30.1.60 이내의 IP 중 하나를 유동적으로 할당하게 된다.
그렇다면 우리는 라즈베리파이 IP를 172.30.1.1 또는 172.30.1.2 로 고정 시키면 되는 것이다.
여기서 2개의 IP를 남겨놓은 이유는 이더넷과 무선에 각각 하나씩 할당 하기 위해서이다.
해당 글에 들어온 대부분은 라즈베리파이5에서 어떻게 IP를 고정하는지에 대해서 알기 위해서 들어왔을 것이다.
기존 라즈베리파이에서는 아래와 같은 방법으로 IP를 고정 시킬 수 있었다.

그러나 라즈베리파이5 OS의 버젼인 bookworm에서는 위 경로로 가도 dhcpcd.conf 파일이 없다.

라즈베리파이5에서는 아래 명령을 통해서 고정 IP로 설정할 수 있다.
sudo nmtui
여기서 nmtui는 NetworkManager를 사용하는 Linux 배포판에서 Wi-Fi 연결을 관리할 수 있는 간단한 TUI이다.

명령어를 입력시 위 TUI가 출력된다.
Edit a connection을 선택하자.(enter 입력)

그러면 위 화면이 뜨게 된다.
나는 현재 라즈베리파이에 무선으로 WIFI를 사용하고 있다.
여기서 내가 사용하고 있는 인터넷의 이름을 알기 위해서는 아래 명령어를 치면 된다.
# 1. 현재 IP가 할당 된 DEVICE 찾기.
$ ifconfig
eth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 2c:cf:67:65:65:cc 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
device interrupt 106
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 44 bytes 4082 (3.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 44 bytes 4082 (3.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.30.1.2 netmask 255.255.255.0 broadcast 172.30.1.255
inet6 fe80::f1e7:490c:c7e7:e9bd prefixlen 64 scopeid 0x20<link>
ether 2c:cf:67:65:65:cd txqueuelen 1000 (Ethernet)
RX packets 307117 bytes 409408902 (390.4 MiB)
RX errors 0 dropped 25 overruns 0 frame 0
TX packets 65658 bytes 4743581 (4.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# 2. 현재 wlan0에 172번대 IP가 배정 되었으니 wlan0 DEVICE의 이름 찾기.
$ nmcli con show
NAME UUID TYPE DEVICE
preconfigured 11111111-1111-1111-1111-111111111111 wifi wlan0
lo 11111111-1111-1111-1111-111111111111 loopback lo
KT_GiGA_E117 11111111-1111-1111-1111-111111111111 wifi --
Wired connection 1 11111111-1111-1111-1111-111111111111 ethernet --

본인 인터넷에 해당하는 이름 선택 후 Edit(enter 입력)

그러면 위와 같은 화면이 뜰 것인데, 위 화면은 내가 일부 설정 해놓아서 값들이 채워져있다.
위 설정 중 바꿔야 할 값들을 하나 하나 설명 해보겠다.

먼저 IPv4 같은 경우에는 기본이 Automatic으로 설정 되어있을 것이다.
이를 Manual로 변경 해주자.
그리고 Address에는 고정시킬 IP 를 입력 해주면 된다.
이 때 뒤에 올 /24 같은 경우에는 서브넷마스크에 따라 작성 하면 된다.
이에 대한 설명은 해당 글 주제와 벗어나기에 “서브넷마스크” 키워드로 검색을 해보자.
서브넷 마스크는 KT 공유기 설정 페이지의 장치 설정 > 네트워크 관리 > LAN 연결 설정 에서 확인할 수 있다.
그 다음 KT의 경우 기본 게이트웨이는 172.30.1.254이다.
그 다음 DNS 서버를 등록 시킨다.
8.8.8.8과 8.8.4.4는 구글 DNS 서버이고, 168.126.63.1과 168.126.63.2는 KT DNS 서버이다.
위와 같이 설정 후 OK를 눌러 나오자.

그 후 Activate a Connection에 들어가 방금 설정한 이름의 네트워크를 껐다 켜서 적용 시키자.

그 후에 라즈베리파이를 껐다 켜보자.
ifconfig를 통해 IP가 방금 설정한대로 출력 된다면 성공 한 것이다.
KT 공유기 설정 페이지의 장치 설정 > 포트포워딩 설정 메뉴에 접속 하자.

포트 포워딩 설정에 아래 설정 값들을 기입 후 추가 버튼을 눌러주면 포트포워딩을 할 수 있다.
나는 외부에서 원격으로 접속해 작업을 진행 할 수 있도록 Well - Known Port 번호를 피해서 SSH 접근이 가능 하도록 설정을 해주고, 또한 외부에서 우리 웹 서버로 접근할 수 있도록 80번 PORT를 포트 포워딩 시켜주었다.
DNS 서버 추가하실 때 구글 서버와 KT 서버를 활용하셨는데 이유를 알 수 있을까요?