본문 바로가기

IT

gnome + spoof-dpi 를 이용한 차단 사이트 우회

반응형

manjaro gnome linux 를 사용하고 있습니다. 다른 배포본을 사용하는 경우 설치 방법등이 좀 다를 수 있습니다.

 

리눅스에서 goodbye-dpi 같은 류의 프로그램으로 내부 proxy 를 구성하고, 이를 이용해서 차단 사이트를 우회하는 방법입니다.

 

gnome 은 settings - network 에서 proxy 를 설정할 수 있고, firefox, chrome 등에서 이를 사용하도록 하는 것이 목표입니다.

수동으로 설정하는 방법을 설명하고, bash script 를 사용하여 자동화할 수 있는 방법을 소개해 보겠습니다.

 

1. 수동 설정

1.1. gnome network proxy

settings - network - proxy 로 이동합니다.

Network proxy 를 On 으로 설정하고, Configuration 을 Manual 로 설정합니다.

HTTP Proxy URL : 127.0.0.1 로 설정, Port 는 12345 로 설정합니다.

(포트는 이후 설명하는 spoof-dpi 의 설정에 맞춰 변경가능합니다.)

 

1.2. spoof-dpi

dpi 앱들의 동작방식은 거의 모두 동일한 것 같습니다.

사이트 접속을 위해서 전송하는 클라이언트의 헬로 패킷의 내용이 암호화되지 않은 것을 이용해서 통신사가 사용자가 어느 사이트에 접속하는지 확인 후 차단 사이트에 해당하는 접속인 경우 차단하는 것인데, dpi 앱들은 첫번째로 전달되는 청크만 차단을 위해서 분석한다는 것을 이용해서 분석하지 못하는 사이즈의 작은 데이터로 첫 전송을 보내고, 이후 나머지를 보내는 방식으로 우회합니다.

 

spoof-dpi 는 https://github.com/xvzc/SpoofDPI 사이트에 접속해서 각 OS 에 맞는 방법으로 설치를 진행합니다.

저의 경우 manjaro linux 는 archlinux 기반이므로, curl 명령어를 이용한 설치 방법으로 설치했습니다.

curl -fsSL https://raw.githubusercontent.com/xvzc/SpoofDPI/main/install.sh | bash -s linux

 

설치가 끝나면, ~/.spoof-dpi/bin 폴더에 설치가 되어, 편리하게 사용하기 위해서 PATH 설정이 필요합니다.

bash, zsh 등에 따라 ~/.bashrc, ~/.zshrc 파일에 아래 내용을 추가합니다.

export PATH=$PATH:~/.spoof-dpi/bin

 

설정을 적용하기 위해서는 Terminal 을 다시 열어주거나, source 명령어를 이용해서 설정을 다시 읽어 적용합니다.

저는 zsh 을 사용하므로 아래와 같이 바로 설정을 적용했습니다.

source ~/.zshrc

 

이제 spoof-dpi 명령어를 입력해서 실행해볼 수 있습니다. 저는 추가로 -port 옵션을 사용해서 포트를 수동 지정해보겠습니다. 기본 포트는 8080으로 동작합니다.

spoof-dpi -port 12345

 

잘 동작하는지 확인합니다.

chrome 은 별다른 설정없이, system proxy 를 사용할 수 있고, firefox 는 system proxy 를 사용하도록 설정이 필요합니다.

 

1.3. firefox proxy 설정

firefox - settings 에서 network 항목을 찾아 settings 버튼을 누릅니다.

별도의 설정이 필요없이 use system proxy settings 을 선택하고 OK 를 눌러 저장합니다. 아래 보시면 아시겠지만, gnome network proxy 에 설정한 내용이 그대로 표시됩니다.

브라우저까지 설정이 끝났으므로 차단 사이트 우회가 잘 되는지 확인합니다.

 

gnome network proxy 와 spoof-dpi 를 자동으로 실행하는 스크립트를 작성해보겠습니다.

 

2. 자동 스크립트

설치 방법까지는 위 수동 방식을 참고하시고, 아래 스크립트를 /usr/local/bin 폴더에 생성하였습니다.

내용을 간단히 적으면, gnome network proxy 를 설정하는 부분, spoof-dpi 를 실행하는 부분, 터미널에서 ctrl-c 를 누르는 경우 설정을 다시 되돌리는 부분으로 이루어져있습니다.

** 터미널 창이 닫히는 경우에도 프록시가 해제되도록 trap turn_off_proxy EXIT 명령이 추가되었습니다.

#!/bin/zsh

turn_off_proxy() {
  echo ""
  echo "========================================"
  echo "Stopped spoof-dpi, turn off gnome proxy."
  echo "========================================"
  gsettings set org.gnome.system.proxy mode 'none'
}

# set gnome proxy
gsettings set org.gnome.system.proxy.http host '127.0.0.1'
gsettings set org.gnome.system.proxy.http port 12345

gsettings set org.gnome.system.proxy use-same-proxy true
gsettings set org.gnome.system.proxy ignore-hosts "['localhost', '127.0.0.0/8', '::1']"

# turn on gnome proxy
gsettings set org.gnome.system.proxy mode 'manual'

# ctrl-c 감지, proxy 해제
trap turn_off_proxy SIGINT
# 터미널이 닫히는 경우, proxy 해제
trap turn_off_proxy EXIT

echo "=========================================="
echo "Turned on gnome proxy and start spoof-dpi."
echo "=========================================="

# start spoof-dpi
spoof-dpi -port 12345

# 중지하고 싶은 경우 ctrl-c 입력 또는 터미널 창을 닫으면,
# spoof-dpi 를 중지하고, gnome proxy 를 끔

 

위의 파일을 /usr/local/bin/proxy-on 이라는 이름으로 작성하여, 저장하고 sudo chmod a+x /usr/local/bin/proxy-on 으로 실행 권한을 추가합니다.

 

이제 터미널에서 proxy-on 이라는 명령어를 입력해서 실행해 봅니다.

spoof-dpi 앱이 잘 실행되었고, gnome network proxy 가 잘 적용되었는지 확인합니다.

잘 적용되었네요.

 

이제 터미널에서 ctrl-c 를 입력하여 스크립트를 중지합니다.

 

spoof-dpi 앱이 잘 종료되고, 스크립트의 ctrl_c 함수도 잘 실행되었네요. gnome network proxy 를 살펴봅니다.

Off 로 잘 보입니다. Proxy 설정 내부도 확인해 봅니다.

원하는대로 깔끔하게 설정이 제거되었습니다.

스크립트가 잘 동작하고 있습니다.

 

이로 간단하게 터미널에서 proxy-on 만 입력하면 local proxy dpi 를 구성할 수 있게 되었습니다.

끝.

반응형