DPI(Deep Packet Inspection) 우회

관련프로그램

내용출처 : https://terzeron.com/confluence/pages/viewpage.action?pageId=34734083

  • Windows에서는 GoodbyeDPIGUI for GoodbyeDPI 패키지를 이용하면 손쉽게 DPI를 우회할 수 있음
  • Linux에서는 쉽게 DPI를 우회할 수 있는 방법이 없으나, MTU를 조정하는 방법, zapret을 이용한 방법과 notsodeep을 이용한 방법 등이 존재하므로 세 가지 중 한 가지를 선택해서 사용하면 됨
  • notsodeepzapret 두 가지 방법 모두 iptables의 라우팅 규칙을 이용하고 있음
  • zapret의 경우 기술문서가 러시아어로 작성되어 있어서 적용에 주의가 필요함
  • 이 방법은 시스템에 충격을 줄 수 있기 때문에 권장하는 방법이 아님
  • 우선 MTU 크기를 220 또는 400 정도의 값으로 조정하는 방법으로 우회 가능한지 확인해볼 것
    • https://www.clien.net/service/board/cm_mac/13158762에 언급된 내용에 따르면 브라우저마다 MTU 값이 다르게 요구된다고 하는데, 가장 성능이 낮게 나오긴 하지만 220으로 설정하면 어지간한 DPI는 우회 가능함
  • 다음 문서를 참조할 것

notsodeep은 업데이트가 중지된지 오래되어 현재는 정상적으로 우회되지 않는경우가 많다.

참고: https://github.com/farukuzun/notsodeep

# Debian 계열
sudo apt-get install libnetfilter-queue-dev libc6-dev

# RedHat 계열
yum install libnetfilter_queue-devel compat-glibc
git clone https://github.com/farukuzun/notsodeep.git
cd notsodeep
make
sudo nohup ./notsodeep &

iptablesTCP connection handshake의 패킷들을 NFQUEUE 응용프로그램인 notsodeep에서 처리할 수 있도록 넘기는 규칙을 적용함

sudo iptables -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK --sport 443 -j NFQUEUE --queue-num 200 --queue-bypass
sudo iptables -t raw -I PREROUTING -p tcp --sport 80 --tcp-flags SYN,ACK SYN,ACK -j NFQUEUE --queue-num 200 --queue-bypass

특정 서버와의 통신인 경우에는, -s 옵션을 이용하여 서버 IP를 적어주면 그 서버와의 통신에 대해서만 적용됨
특정 서버를 notsodeep으로 필터링하지 않는 예외 규칙을 적용하려면 다음 명령을 사용할 수 있음

sudo iptables -I INPUT -s <제외할IP> -p tcp --tcp-flags SYN,ACK SYN,ACK --sport 443 -j ACCEPT

-A 옵션 대신 -I 옵션을 사용하여 규칙 테이블 맨 위에 등록해두는 것이 중요함

firewall-cmd --permanent --direct --passthrough ipv4 -I INPUT 1 -p tcp --tcp-flags SYN,ACK SYN,ACK --sport 443 -j NFQUEUE --queue-num 200 --queue-bypass
firewall-cmd --permanent --direct --passthrough ipv4 -t raw -I PREROUTING 1 -p tcp --sport 80 --tcp-flags SYN,ACK SYN,ACK -j NFQUEUE --queue-num 200 --queue-bypass

firewall-cmd --reload
cd /tmp
git clone https://github.com/farukuzun/notsodeep.git
cd notsodeep
make
cd ..
sudo su
cp -R notsodeep /opt
cp /opt/notsodeep/notsodeep.service /etc/systemd/system/
systemctl enable notsodeep.service
iptables -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK --sport 443 -j NFQUEUE --queue-num 200 --queue-bypass
iptables -t raw -I PREROUTING -p tcp --sport 80 --tcp-flags SYN,ACK SYN,ACK -j NFQUEUE --queue-num 200 --queue-bypass

apt install iptables-persistent

netfilter-persistent save

zapret은 현재까지도 업데이트가 꾸준히 이루어지고 있으며 다양한 방법으로 우회시도를 하므로 goodbyedpi와 더불어 아주 잘 동작하는 솔루션 중에 하나이다.

링크 : https://github.com/bol-van/zapret

아래 내용은 debian 11버전에서 테스트 되었습니다.

root@dpi:~# apt install vim unzip git curl wget
root@dpi:~# git clone https://github.com/bol-van/zapret
Cloning into 'zapret'...
remote: Enumerating objects: 4171, done.
remote: Counting objects: 100% (782/782), done.
remote: Compressing objects: 100% (416/416), done.
remote: Total 4171 (delta 370), reused 769 (delta 365), pack-reused 3389
Receiving objects: 100% (4171/4171), 41.13 MiB | 8.24 MiB/s, done.
Resolving deltas: 100% (2208/2208), done.

일단 현재 본인의 ISP에서 차단을 우회하는 방식을 찾아야 한다.
먼저 zapret 바이너리 실행파일을 설치한 이후 blockcheck.sh 로 차단방식을 찾아서 우회하는 방법을 알아낸다.

root@dpi:~# cd zapret/
root@dpi:~/zapret# ./install_bin.sh
x86_64 is OK
installing binaries ...
linking : ../binaries/x86_64/ip2net => /root/zapret/ip2net
linking : ../binaries/x86_64/mdig => /root/zapret/mdig
linking : ../binaries/x86_64/nfqws => /root/zapret/nfq
linking : ../binaries/x86_64/tpws => /root/zapret/tpws


### 본인의 ISP에서 차단/우회 되는 방식을 체크한다.
root@dpi:~/zapret# ./blockcheck.sh
...
* SUMMARY
ipv4 xvideos.com curl_test_http : tpws --hostcase
ipv4 xvideos.com curl_test_http : nfqws --hostcase
ipv4 xvideos.com curl_test_https_tls12 : working without bypass

press enter to continue

체크가 될때 사이트 주소는 본인 ISP에서 warning으로 차단되는 사이트 아무거나 넣어주면 된다.
위 테스트는 xvideos.com으로 테스트 한 결과이다. SUMMARY에 나온대로 tpws --hostcasenfqws --hostcase방식을 이용하면 우회가 가능하다.

이후 이전 과정에서 확인한 우회 방식으로 설치를 진행한다.

root@dpi:~/zapret# ./install_easy.sh

이후 해당 사이트로 우회 접근 되는지 확인해보도록 한다.

로그인하면 댓글을 남길 수 있습니다.
  • dpi_deep_packet_inspection_우회.txt
  • 마지막으로 수정됨: 2023/02/02 02:19
  • 저자 koov