라즈베리 파이에 할당된 동적 IP 알림받기

Woody·2022년 5월 12일
0

학교에서 라즈베리 파이를 들고 다니면서 프로젝트를 할 일이 생겼다. 매번 랜선을 들고다니기는 귀찮아서 힘들어서 AP 연결을 설정하려 했다. 그런데 학교에서 AP에 연결할 경우 매번 IP가 바뀔 수밖에 없다 (랜선 연결의 경우 고정 IP이지만). 이 경우 와이파이에 연결하는 의미가 없다. 매번 할당된 IP를 결국 랜선으로 연결, 할당된 IP를 확인하는 과정을 거쳐야 하기 때문이다.

그래서 라즈베리 파이가 와이파이에 연결될 경우마다 할당된 IP를 슬랙 알림으로 전달받으면 연결하기 편하겠다는 생각이 들어 설정했고, 그 과정을 공유하려고 한다.

이후 과정은 라즈베리 파이 4 + 우분투 21.10 + EAP 유형 WLAN 기준입니다. 라즈베리 파이에 ssh를 통해 접속된 상태라고 가정합니다.

인터페이스 확인

우선 라즈베리 파이의 네트워크 인터페이스 확인이 필요하다. 확인에 앞서 다음 패키지들을 설치한다.

sudo apt install net-tools
sudo apt install wireless-tools

다음 명령어 중 하나를 통해 네트워크 인터페이스를 확인할 수 있다. (참고)

iwconfig
ls /sys/class/net
sudo lshw -C Network

특히 이 중 마지막 명령어로 연결 가능한 와이파이 정보를 확인할 수 있다. 만약 연결하려는 인터페이스(여기서는 wlan)이 DISABLED 상태라면 sudo ifconfig ${interface-name} up을 통해 연결 가능한 상태로 만들어주자.

나의 경우 인터페이스 이름이 wlan0였고 sudo ifconfig wlan0 up을 실행했다.

AP 연결 설정

학교, 회사망이라면 EAP 방식의 AP 연결일 가능성이 높다. 우선 AP 연결을 진행하도록 하자. /etc/netplan 내의 파일 설정을 통해 와이파이 연결시 입력하는 id/pw를 저장할 수 있고 AP에 연결할 수 있다. OS마다 다른 것으로 보이고 나의 경우 /etc/netplan/50-cloud-init.yaml 파일을 통해 연결을 설정할 수 있었다. 이 파일을 다음과 같이 수정한다.

# /etc/netplan/50-cloud-init.yaml

network:
    ethernets:
        # 필요한 경우 이더넷 설정
    wifis:
        wlan0:
            access-points:
                ${AP_이름}:
                    auth:
                        key-management: eap
                        identity: ${아이디}
                        password: ${비밀번호}
            dhcp4: true
            optional: true
    version: 2

위 파일에서 ${AP_이름}, ${아이디}, ${비밀번호}를 본인의 환경에 맞게 입력해주면 된다. 대개(적어도 우리 학교는) 동적 IP 할당을 할 것이므로 dhcp4: true 옵션을 적용한 것을 확인할 수 있다.

파일을 저장하고 다음 명령어들을 통해 적용하면 원하는 와이파이에 연결할 수 있다. 이 때 알아둬야 할 것은 네트워크 연결이 변경되기 때문에 기존 ssh 연결이 종료될 수도 있다. "왜 안끝나지?"하며 당황하지 말고 새로운 쉘로 시도해보면 접속이 될 것이다.

sudo netplan generate
sudo netplan apply

Slack 연결 설정

우선 알림을 원하는 slack 채널에 incoming-webhooks 앱을 추가한다.

추가했다면 요청을 보낼 수 있는 URL이 생성될 텐데 이 링크를 어딘가에 저장해두자.

AP 연결시 알림 설정

이제 마지막 단계이다. AP에 연결되었을 경우 알림을 보내는 스크립트를 만들어야 한다. while문을 돌며 1초마다 연결 상태를 확인할 수도 있겠으나.... 매우 안좋은 방법이다.

다행히도 네트워크가 연결되었을 때 특정 스크립트를 실행할 수 있는 방법이 있다. 바로 스크립트를 /etc/network/if-up.d/ directory 내에 저장하는 것이다. Linux man 페이지를 보면 다음과 같이 설명하고 있다.

Scripts in this directory are run after bringing the interface up.

즉 네트워크 인터페이스가 연결되면 실행된다는 것이다. 이 스크립트들을 실행하기 위해서는 우선 인터페이스 설정이 필요하다. 다음과 같이 파일을 수정, 혹은 생성해주자. 이 파일을 설정하지 않으면 이후 추가할 스크립트가 실행되지 않는다.

# /etc/network/interfaces
auto wlan0
iface wlan0 inet dhcp

이후 새로운 슬랙 알림을 보내기 위한 스크립트 파일을 저장한다.

# /etc/network/if-up.d/slack-notification.sh

if [ "$IFACE" = "wlan0" ]; then
        ip=$(ip address | grep -A 3 "wlan0" | grep -Po "inet \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")
        curl -X POST -H "Content-Type: application/json" -d \
                '{"text":"'"$ip"'"}' ${저장한_slack_webhook_url};
fi

이 스크립트가 하는 일은

  • 새롭게 up된 인터페이스가 wlan0인지 확인하고 (환경에 따라 wlan0가 아닐 수도 있다)
  • wlan0에 할당된 IP를 파싱한 후
  • 이 IP를 위에서 저장한 slack webhook url에 POST 요청을 통해 전송하는 것이다.

원한다면 slack app 문서를 참고해 이 IP를 다양한 형식으로 전송할 수도 있다. 그리고 다음 명령어를 통해 연결을 테스트할 수 있다.

sudo ifdown wlan0 && sudo ifup -v wlan0

여기까지 성공적으로 설정했다면(!!!!) 다음과 같은 알림을 오전 4시 24분에 받을 수 있다.

이제 라즈베리 파이가 학교 내 어디에 있던지 쉽게 ssh 접속을 할 수 있게 되었다!

profile
코드야 내가 잘못했어

0개의 댓글