자본주의 시대의 광고는 경제의 허파이자 세상이 움직이는 동기요, 곧 자본주의 그 자체이다. 사람들은 광고를 보고 내 돈을 어디에, 어떻게 소비할 지 결정하고, 이는 곧 사회에 자본을 흐르게 한다. 어떻게 보면 우리 시대에 없어서는 안될 필연적인 존재지만, 종종 눈엣가시처럼 거슬리는 건 어쩔 수 없다. 광고가 나의 소비를 위한 참고 정보 수준을 뛰어넘어 우리 눈앞을 뒤덮어 버리는 테러 수준에 다달아서 그런 것인지, AdBlock 같은 온라인 광고 차단 플러그인의 인기는 날이 갈수록 하늘로 치솟는다. 오프라인에서는 눈을 가리고 살 수 없으니 온라인 에서라도 가리겠다는 사람들의 발버둥 아닐까.

더 확실히 온라인에서의 눈을 가리고 싶다는 분들을 위해, 네트워크 레벨에서 광고를 걸러 주는 Pi-hole 이라는 녀석을 들고 왔다. 내 로컬 네트워크의 DNS 브릿지가 되어 트래픽이 브릿지를 건너는 순간 광고 DB와 비교해 얄짤없이 광고는 모조리 잘라버린다나 뭐라나. 암튼, Pi-hole이라는 이름에 맞게 라즈베리 파이, 그리고 우리의 친구 Docker를 가지고 내 인터넷으로 들어오는 광고를 학살해 보자.

설치하기

기본적으로 Pi-hole이 권장하는 설치 방식은 호스트 OS에 바로 설치되는 쉘 스크립트지만, 우리는 조금 더 깔끔한 설치와 실행을 위해 Docker를 사용하자. 다행히 Pi-hole 에서는 Docker화 시킨 프로젝트도 함께 제공하고 있다. Pi-hole만을 위한 폴더를 하나 생성한 후, 그 안에 docker-compose.yml 파일을 만들어보자. 내용은 아래 것을 복사하면 된다. 아래의 샘플 docker-compose 파일을 포함한 전체 프로젝트 자료는 이 링크에서 확인할 수 있다.

version: "3"

# More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/
services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "67:67/udp"
      - "80:80/tcp"
      - "443:443/tcp"
    environment:
      TZ: 'Asia/Seoul'
      WEBPASSWORD: '<MY_PASSWORD>'
    # Volumes store your data between container upgrades
    volumes:
      - './etc-pihole/:/etc/pihole/'
      - './etc-dnsmasq.d/:/etc/dnsmasq.d/'
    dns:
      - 127.0.0.1
      - 1.1.1.1
      - 1.0.0.1
    # Recommended but not required (DHCP needs NET_ADMIN)
    #   https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
    cap_add:
      - NET_ADMIN
    restart: unless-stopped

파일이 실행될 경우, docker-composepihole 이라는 컨테이너를 최신의 pihole/pihole 이미지를 사용해서 생성하고, 53 (DNS), 67 (DHCP 서버), 80/443 (HTTP, HTTPS) 포트를 할당해준다. Timezone은 Asia/Seoul 로 env에 명시해두고, docker-compose 가 존재하는 폴더에 etc-piholeetc-dnsmasq.d 라는 폴더를 생성해 pihole 컨테이너의 실제 /etc/pihole 경로와 /etc/dnsmasq.d 경로를 마운트한다. 이를 통해서 추후 컨테이너가 재시작 될 경우에도 설정 정보를 지킬 수 있다. cap_addNET_ADMIN 권한은 pihole 로 DHCP 서버 기능을 같이 사용할 경우 필요해 추가하였다.

딱 하나 유저가 커스터마이징 해야할 부분은, 웹 대시보드의 비밀번호를 변경하는 WEBPASSWORD env다. 위 ㅍ일의 <MY_PASSWORD> 부분을 내가 원하는 비밀번호로 설정하자.

자, 설정에 문제가 없는 것을 확인했으면, 아래 명령어로 컨테이너를 올려볼 차례다.

docker-compose up -d  

아래의 명령어를 통해 로그를 불러올 수 있다.

docker logs pihole

실행이 완료되었다면, 이제 내 라즈베리 파이는 광고를 걸러주는 DNS 서버가 된 것이다! 컴퓨터나 공유기의 DNS 설정에서 내 라즈베리 파이의 로컬 IP를 서버로 설정해준다면, 바로 기본 설정의 광고제거 DNS 기능을 사용할 수 있다. 조금 더 둘러보고 싶다면, 브라우저를 켜고 라즈베리 파이의 로컬 IP로 접속해보자. 아래와 같은 대시보드가 독자를 환영해줄 것이다.

dashboardmain

대시보드는 생각보다 많은 정보와 기능을 제공한다. DNS를 통한 웹 접속이 얼만큼 어떻게 어디로 이뤄졌는지 등을 깔끔한 차트로 보여준다. 설정에 들어가면 아래와 같이 차단할 광고의 목록도 직접 커스터마이징이 가능하다. 기본 리스트로 차단되지 않는 광고가 보인다면 직접 리스트에 해당 광고 서버 주소를 추가할 수 있다.

piholeadlist

기본 설정에서 한가지 찝찝한 부분이 있는데, 바로 내가 어떤 사이트를 얼만큼 접속했는지 쿼리 기록이 모조리 남는다는 것. 다행히 설정의 하단에 내려가면 Danger Zone에서 쿼리 기록을 모조리 지우고 비활성화 할 수 있는 기능을 제공한다. 내 접속기록이 어딘가에 남는 것이 찝집하다면 Disable query logging and flush logs 버튼을 눌러 살포시 막아주자.

piholedisablelogging

컴퓨터의 DNS 설정을 라즈베리 파이의 IP로 바꿔 DNS 기능이 제대로 동작하는 걸 확인했다면, 아예 공유기 레벨의 DNS를 라즈베리 파이로 고정해 공유기에 연결되는 모든 기기가 광고 제거 효과를 받게 만드는 걸 추천한다. 아래와 같이 설정하면 된다 (기본 DNS에 라즈베리 파이의 로컬 IP 주소를 집어넣자).

piholednsaddtorouter

필요한 설정은 모두 끝났다. 이제 광고 없는 클린한 웹 환경을 즐겨보자 :)

마무리하며

Pi-hole을 비롯한 광고 차단 도구는 분명 강력하고 스팸 수준의 온라인 광고들을 원천적으로 차단해 쾌적한 웹 이용 환경을 만들어 주지만, 가끔은 광고 차단 기능을 꺼 주어야 할 때도 존재한다.

우리가 온라인에서 무료로 만나는 수많은 양질의 콘텐츠들은 광고 수익이 전적으로 의지하는 경우가 많다. 일부 사이트에 따라 광고 차단이 감지되면 광고 차단을 꺼 주라는 메시지를 출력시키는 것도 같은 이유다. 더 많은 사람들이 광고를 차단할수록 많은 크리에이터들의 잠재적인 수익도 적어진다.

나의 쾌적한 웹 이용 환경도 중요하지만 어느 정도의 광고는 납득해주며 양질의 온라인 콘텐츠가 지속적으로 공급될 수 있게 하는 것도 아주 중요하다. Pi-hole로 쾌적한 인터넷을 누리되, 가끔 생각이 날 땐 잠깐 Pi-hole의 전원을 꺼 보는 것은 어떨까. Pi-hole 대시보드의 메뉴에서 기능 정지 버튼을 누르면 간단하다.