인터넷 요금 자급자족하기

새 인터넷 회선을 계약

올해 여름에 새 거처로 이사를 갔습니다. 이전 자취방에는 인터넷이 포함되어 있었는데, 여기에서는 인터넷을 별도로 신청해야 한다고 하네요. 저는 한시라도 인터넷이 없으면 마음이 불안해지는 현대인이기 때문에, 사은품도 받지 않고 KT 공홈을 통해 바로 500Mbps 상품을 신청했습니다. 다행인건지(신청 당일 개통됨) 불행인건지(기사님은 공휴일에도 일을 해야 함) 모르겠으나 굉장히 빠르게 설치와 개통이 진행되었습니다.

이렇게 쾌적한 하프 기가비트 회선이 확보되었고, 매달 2만원 가량의 추가 인터넷 요금 지출이 생겼습니다.

EarnApp: 노는 인터넷 대역폭으로 돈 버는 서비스

3년 전에 처음으로 집을 나와서 자취를 할 때 라즈베리 파이를 들고 나왔습니다. 당시에 돈이 궁해서 패시브 인컴을 주제로 한참을 찾아보았던 기억이 있는데, 노는 라즈베리 파이로 수익을 올리는 방법이 있다고 하여 바로 적용해두었던 것이 있습니다. EarnApp이라는 서비스인데요(광고 아님), 세계 각지의 IP 주소가 필요한 사람들을 위해 회선을 대여해주면 이에 대한 비용을 지급해주는 모델을 가지고 있습니다. 그러니까 제 집 인터넷을 프록시로 내어주는 것이지요.

이 서비스는 적립금이 일정 금액이 되면 미리 등록한 결제 수단(저는 PayPal)으로 출금을 해주는데, 대략 6개월에 $2.5 정도로 수익은 굉장히 미미했습니다.

8월 업데이트: EarnApp이 진짜로 돈이 됨

그러던 어느날 EarnApp 보상 모델에 변화가 생깁니다. 하루 종일 켜 놓아도 6개월에 고작 $2.5씩 벌던 것이 이제는 1개월에 $5가 된 것입니다! 대략 12배의 수익 상승이 생겼습니다. 이 변화로 인해 미국 내에서 종량제로 트래픽 나간 만큼 보상을 받던 유저들은 수익이 줄어들게 된 것 같지만, 저에게는 좋은 일이었습니다. 🤗

여기서 중요한 점이 있습니다. 한 달에 기기당 $5도 아니고 계정당 $5도 아닙니다. 공인 IP당 $5입니다. 기기가 하나여도 공인 IP를 여러 개 사용할 수 있다면 어떨까요?

KT는 공인 IP를 8개 줍니다.

인터넷 1회선을 계약하면 원칙상 공인 IP는 1개 부여되어야 하지만, 실제로는 인터넷 전화도 있고 TV도 달아야 하고 컴퓨터도 여러 대 쓸 수 있으니 모뎀 포트 갯수(4개)만큼은 할당된다고 합니다. 그런데 맥북에 USB 랜카드를 꽂고 VM을 여러 대 띄워 실제로 측정해보니 공인 IP 8개 까지는 동시에 통신이 되는 것을 확인하였습니다. 8개 넘게도 DHCP로 IP 주소를 받아올 수는 있으나, 동시에 사용 가능한 MAC 주소의 갯수에 제한이 존재하는 것으로 보였습니다.

이제부터 IP는 💵입니다. 8개면 $40입니다. 그런데 인터넷을 조금 뒤져보니, KT 기술부서와 잘 대화를 나누어 많으면 수십 개 까지도 제한을 올려버린 사례가 보입니다. 20개만 되어도 $100입니다. 하하.

공인 IP 수급 상황은 통신사와 지역마다 다릅니다. IP가 남아도는 지역은 요청만 하면 제한을 풀어주는데, 아닌 경우는 8개도 어렵다고 합니다. 다행히도 KT는 가지고 있는 공인 IP가 많습니다. 다만 제가 거주중인 지역의 상황은 모르는 것이니, KT 고객센터를 통해 KT 원효지사에 문의를 드렸습니다. 그리고 이런 답변을 얻었습니다:

“과거에는 지사 재량으로 가입자의 MAC 주소 갯수 제한을 조정하는 경우가 있었으나, 최근에 시스템이 바뀌면서 사람이 직접 설정을 바꿀 수 없게 되었습니다.”

아무래도 가망이 없는 것 같아 8개에서 만족하기로 했습니다. 그러고 보니 제가 찾아본 성공(?) 사례들 중에 올해 여름에 올라온 사례는 없었던 것 같네요.

엔지니어링 타임

이제 목표는 라즈베리 파이의 보조 네트워크 인터페이스를 모뎀에 직접 물리고 컨테이너를 올려 8개의 EarnApp 인스턴스를 돌리는 것입니다.

컨테이너는 LXD

처음에는 익숙한 Proxmox Virtual Environmet를 고려하였습니다. 그런데 PVE로 Debian LXC 컨테이너를 만들어서 IP 주소를 할당받으려고 보니 dhclient가 자꾸 주소를 못 받아오는 겁니다. 그래서 DHCP 클라이언트를 dhcpcd로 교체하니 할당은 되지만 너무 한참 걸립니다. 사실 제가 원하던 것은 PVE 같은 진지하고 웹 콘솔까지 있는 큰 솔루션이 아니었습니다. 그냥 커맨드라인에서 명령 몇 개로 조작할 수 있으면 되고, NIC 만들고 설정하는게 편했으면 좋겠다 정도였습니다. 그리고 정확히 이 용도로 적절한 LXD라는 도구를 찾았습니다. 굉장히 간단한 커맨드라인 감성입니다. 새 컨테이너를 띄우려면 lxc launch images:debian/13 worker07 -c limits.memory=128MB -c limits.cpu=1 명령을 사용하면 됩니다.

NIC는 라즈베리 파이 내장 WLAN을 활용하는 것으로

처음에는 기존 eth0을 놔두고 저렴이 USB NIC를 bridge로 붙여서 모뎀에 연결하였습니다. 그 상태로 실험을 해보니 굉장히 이상한 문제가 생겼는데, 여러 호스트(컨테이너)에서 동시에 외부로 네트워크 요청을 보낼 때, 마지막으로 통신에 성공한 호스트만 응답을 받는 것이었습니다. 가령 A 호스트에서 curl로 요청을 날리면 B 호스트는 네트워크 수신 불능 상태가 됩니다. 반면 A는 이미 한 번 자신의 MAC 주소로 연결을 뚫어 놓았으니(?) 통신이 잘 됩니다. 그러다가 B에서 다시 요청을 여러 번 보내어 응답까지 성공적으로 받은 상태가 되면 다시 A가 먹통이 됩니다. 아마 NIC가 ARP를 제대로 구현하지 않아서 단일 MAC만 기억하는 것이 아닐까 추정하는데, 도저히 NIC 아니면 원인이 될만한 것이 없었기 때문입니다.

그래서 저렴이 NIC는 반품해버리고 대신 라즈베리 파이의 두 번째 내장 NIC인 wlan0을 사용하기로 하였습니다. 컨테이너들이 bridge로 사용하는 NIC는 트래픽이 많을 테니 eth0을 그쪽으로 돌리고, SSH로 접속할 본체 호스트는 wlan0으로 연결하였습니다.

EarnApp 리눅스 클라이언트 버그 발견

EarnApp 데몬은 기본적으로 네트워크 요청을 대리해주는 친구입니다. 따라서 소켓을 굉장히 많이 다룹니다. 그런데 네이티브 호스트 환경에서는 아무 문제도 없던 것이 컨테이너 안에서 돌아가니 소켓 릭이 발생하여 fd가 수백개씩 생겨 메모리를 다 잡아먹는 현상이 나타났습니다.

며칠씩 관찰하면서 메모리가 부족하다 싶으면 데몬의 재시작을 믿고 sudo killall earnapp 해주곤 했는데, 이 과정이 너무 귀찮아서 fd가 100개가 넘어가면 kill을 날리는 watcher를 만들어서 띄워 두었습니다.

모니터링

어지간하면 데몬이 잘 돌아가지만 컨테이너 환경의 특성 때문인지 트래픽이 멈춘 상태로 지속될 때가 있습니다. 이럴 때에는 호스트에 SSH로 접속하여 sudo killall earnapp을 실행해주었는데, 이것도 이제 귀찮아서 매일 자정에 cron으로 실행되게 해 주었습니다.

마치며

인터넷 회선이 2만원대인데 여기서 월 $35 이상의 수익이 창출되고 있으니 과연 남는 장사라고 할 만 합니다. 인터넷 요금 자급자족 달성. 🤗

댓글