수성컴전자방입니다. 라즈베리파이를 서버로 사용할 경우 외부에서 라즈베리파이에 접속하려면 IP 주소를 입력해야 합니다. 그런데 IP 주소가 동적 IP일 경우 IP 주소가 자꾸 바뀌어 불편할 것입니다. 따라서 고정 IP로 설정하여 사용하는 것이 편리합니다. 오늘은 Ubuntu Server가 설치된 라즈베라파이4 Model B의 IP를 고정 IP로 설정해 보겠습니다.
목차
1. 공유기 동적 IP 범위 설정, DNS 주소 확인
2. VS Code SSH 접속, ifconfig, 폴더 열기
3. /etc/netplan/50-cloud-init.yaml 접근 권한 설정
4. /etc/netplan/50-cloud-init.yaml 수정
5. sudo netplan apply
6. 글 마무리
7. 참고 자료
1. 공유기 동적 IP 범위 설정, DNS 주소 확인
우리가 사용할 고정 IP 주소를 공유기가 다른 기기에 동적 IP로 할당하면 안 되기 때문에 DHCP 서버 설정을 해 주어야 합니다. IP 주소 대여 범위를 적당히 축소시키면 됩니다. 그리고 DNS 주소를 메모해 두시기 바랍니다.
아래는 ipTIME 공유기에서 DHCP 서버 설정하는 방법입니다.
1.1. PC에서 시작을 오른쪽 클릭(Windows+X)하고 터미널(I)을 클릭합니다.
1.2. 기본 게이트웨이 주소를 복사합니다.
1.3. 웹 브라우저에 방금 복사한 게이트웨이 주소를 붙여넣고 접속합니다.
1.4. 그러면 로그인 창이 뜹니다. 로그인합니다.
만약 처음 로그인한다면 아래의 초기 ID, 암호를 참고하여 로그인합니다.
- 로그인 이름: admin
- 로그인 암호: admin 또는 공유기 비밀번호
1.5. 관리도구를 클릭합니다.
1.6. 고급 설정→네트워크 관리→DHCP 서버 설정으로 들어갑니다.
1.7. IP주소 대여 범위를 줄입니다. 저는 이미 앞부분이 다른 PC, 휴대 전화 등에 동적으로 할당된 상태이므로 192.168.0.2~192.168.0.100을 IP주소 대여 범위로 설정했습니다. 그러면 라즈베리파이의 고정 IP는 192.168.0.101~192.168.0.256 중에서 고르면 되는 것입니다.
1.8. 적용을 클릭합니다.
1.*. 서브넷 마스크, 기본 DNS 주소, 보조 DNS 주소를 확인하고 메모해 둡니다.
2. VS Code SSH 접속, ifconfig, 폴더 열기
2.1. 저는 PC에 설치된 Visual Studio Code를 이용하여 라즈베리파이에 SSH 접속을 할 것입니다. Visual Studio Code를 사용하지 않고도 고정 IP 설정이 가능하지만 그럴 경우 Vim 에디터 같은 것을 사용하셔야 할 것입니다.
2.2. 터미널→새 터미널을 클릭합니다.
2.3. 리눅스에서 IP를 확인할 수 있는 명령어는 ifconfig입니다. 만약 ifconfig 명령을 실행했는데 Command ‘ifconfig’ not found라고 뜨면 sudo apt install net-tools 명령을 실행하여 net-tools를 설치합니다.
2.4. 설치가 완료되면 다시 ifconfig 명령을 실행합니다. 현재 IP 주소를 확인할 수 있습니다. 이제 이 IP 주소를 바꿔 볼 것입니다.
2.5. 폴더 열기를 클릭합니다.(또는 파일→폴더 열기... 또는 단축키 Ctrl+K Ctrl+O)
2.6. 그러면 라즈베리파이의 폴더에 접근할 수 있게 되는데 지금 우리는 root directory(/)에 접근해야 합니다. 따라서 ..을 계속 눌러 주거나
/를 입력하고 확인을 클릭합니다.
2.7. Ubuntu Server 계정의 암호를 입력합니다.
2.8. ‘이 폴더에 있는 파일의 작성자를 신뢰합니까?’라고 묻는데 root에 있는 모든 파일의 작성자를 신뢰한다고 할 수 없으니 아니요, 작성자를 신뢰하지 않습니다.를 클릭합니다.
3. /etc/netplan/50-cloud-init.yaml 접근 권한 설정
고정 IP 설정을 위해 /etc/netplan/50-cloud-init.yaml를 수정해야 합니다.
그러나 root directory에서 /etc/netplan/50-cloud-init.yaml를 열려고 하면 ‘열 수 없음’이라는 오류가 뜹니다. 왜냐하면 이 파일 접근 권한이 root에만 부여되어 있기 때문입니다. 따라서 이 파일을 사용자 계정도 접근할 수 있게 설정하겠습니다.
3.1. 터미널에 cd etc/netplan을 입력하여 netplan 폴더로 들어갑니다.
3.2. ls -l 명령을 실행하여 현재 권한을 확인해 보면 50-cloud-init.yaml의 접근 권한이 root에 부여된 것을 확인할 수 있습니다.
3.3. sudo chown 사용자계정명 50-cloud-init.yaml 명령을 실행합니다.
3.4. ls -l 명령을 실행하여 현재 권한을 확인해 보면 50-cloud-init.yaml의 접근 권한이 사용자 계정에 부여된 것을 확인할 수 있습니다.
3.5. 이제 etc 폴더 안에 있는 netplan 폴더 안에 있는 50-cloud-init.yaml 파일을 열어 보면 파일이 잘 열리는 것을 보실 수 있습니다.
4. /etc/netplan/50-cloud-init.yaml 수정
/etc/netplan/50-cloud-init.yaml 파일을 아래와 같이 수정합니다. 9~16행만 수정하면 될 것입니다.
# 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:
eth0:
dhcp4: no
addresses:
- <원하는 고정 IP 주소>/<서브넷 마스크>
routes:
- to: default
via: <게이트웨이 주소>
nameservers:
addresses: [<기본 DNS 주소>, <보조 DNS 주소>]
optional: true
version: 2
[Line 9]
dhcp4:true를 dhcp4: no로 수정합니다.
[Line 10~11 addresses]
1.7번 과정에서 설정한 동적 IP 주소 범위 외 다른 주소 중에서 고정 IP로 할당할 주소와 서브넷 마스크를 적습니다.
서브넷 마스크는 이진수로 변환한 다음 앞에서부터 1의 개수를 센 숫자를 입력합니다. 예를 들어 서브넷 마스크가 255.255.255.0이면 이진수로 변환했을 때 11111111.11111111.11111111.00000000이므로 24를 입력합니다.
11행 예시) - 192.168.0.101/24
[Line 12~14 routes]
게이트웨이 주소를 적습니다.
14행 예시) via: 192.168.0.1
[Line 15~16 nameservers]
DNS 주소를 적습니다. 보통 ‘기본 DNS 주소’와 ‘보조 DNS 주소’가 있을 것입니다. 배열을 이용하여 두 주소를 모두 적으면 됩니다.
16행 예시) addresses: [168.126.63.1, 168.126.63.2]
[예시]
5. sudo netplan apply
5.1. sudo netplan apply 명령을 실행합니다.
5.2. VS Code의 SSH 연결이 끊어질 수 있습니다. SSH HostName을 IP 주소로 설정한 경우 SSH 호스트 구성 파일을 열어 IP 주소를 수정하신 후 다시 SSH 연결하시고, SSH HostName을 라즈베리파이 호스트 이름으로 설정하신 경우 그냥 암호만 다시 입력하시면 됩니다.
5.3. ifconfig 명령을 실행해 보시면 IP 주소가 정상적으로 설정된 것을 확인하실 수 있습니다.
6. 글 마무리
제 글을 읽어 주셔서 감사합니다. 다음에 만나요!
7. 참고 자료
1) erwin. 2022. “netplan generate: `gateway4` has been deprecated, use default routes instead”, StackExchange. (2024. 06. 22. 방문). https://unix.stackexchange.com/questions/681220/netplan-generate-gateway4-has-been-deprecated-use-default-routes-instead