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 를 구성할 수 있게 되었습니다.
끝.