콘텐츠로 이동

[iOS] hosts 파일 내용 변경사항 적용하는 방법

사건의 발단

앱에 SSL Pinning을 구현하기 위하여 우선 HTTPS 서버를 구축했다.
운영 서버에서 사용하는 인증서를 받아 로컬에 서버를 구동하고 접속하려고 하니
인증서에 등록된 Hostname에 맞지 않으면 Invalid Certificate 에러를 뿜어낸다.
우선 개발용인 PC에서는 hosts 파일을 수정하여 등록된 주소로 접속해보니 잘 됐다.
아이폰에서도 해봤다.

Ping Test

동일 네트워크에 있는 탈옥된 아이폰에 /etc/hosts 파일을 수정했다.
로컬 서버의 내부 IP(192.168.0.x)와 주소(test.useworld.com)를 넣고나서 Ping을 날렸다.

$ ping test.useworld.com
PING test.useworld.com (192.168.0.x) 56(84) bytes of data.
64 bytes from 192.168.0.x: icmp_seq=1 ttl=54 time=0.0 ms
64 bytes from 192.168.0.x: icmp_seq=2 ttl=54 time=0.0 ms
64 bytes from 192.168.0.x: icmp_seq=3 ttl=54 time=0.0 ms
64 bytes from 192.168.0.x: icmp_seq=4 ttl=54 time=0.0 ms
64 bytes from 192.168.0.x: icmp_seq=5 ttl=54 time=0.0 ms
64 bytes from 192.168.0.x: icmp_seq=6 ttl=54 time=0.0 ms
64 bytes from 192.168.0.x: icmp_seq=7 ttl=54 time=0.0 ms
...

잘 된다.

Safari와 앱 Test

이어서 Safari를 열어 https://test.useworld.com로 접속해보니 이게 왠걸.
서버에 접속할 수 없다고 한다.
개발중인 앱에서 Request를 날려봐도 마찬가지로 Not Found라고 나온다.
포트가 제대로 열려 있는 것은 확인했다.

삽질 내역

구글링을 해봐도 쉽게 나와주질 않는다.

  • DNS Flush를 하라고 해서 찾아보니 비행기 모드를 하고 15초 정도 있다가 다시 켜면 된다고 했으나 실패.
  • IPv4로만 해놨으면 IPv6으로 변환해서 한번 더 hosts 파일에 등록하면 된다고 한다.
    변환 사이트에서 변환해서 등록해 보았으나 역시나 실패.
  • test.useworld.com이라고 했으면 같은 IP로 useworld.com도 등록하면 된다고 한다. 마찬가지로 실패.
  • iOS 12에서 hosts 적용이 안되는데 어떻게 하냐는 질문에 답이 없어 실패.

계속되는 실패에 원래 iOS에서는 안되는 건가? 라는 생각이 들었다.

결론

삽질을 하다가 결국엔 알아냈다.
hosts 파일 수정 후 LetMeBlock Tweak을 설치하면 적용된다.

LetMeBlock 설치 방법

  1. Cydia의 Source에서 https://poomsmart.github.io/repo/ Repository를 추가한다.
  2. LetMeBlock을 검색하여 들어가서 변경을 누르고 재설치한다.
  3. root 권한으로 mDNSResponder를 kill한다.
$ killall -9 mDNSResponder
$ killall -9 mDNSResponderHelper

Safari로 접속을 해도 앱에서 접근을 해도 잘된다.
오 놀라워라.

끝.


마지막 업데이트: 2022-05-13

댓글