본문 바로가기

웹서비스개발/웹 서버 관리

한국(S.Korea) 프록시를 이용한 접속 우회방법

국내에서 미국(US) 프록시를 이용하여 미국쪽 서비스에 접근하려는 경우는 너무 흔하게 많이 알고있고

불순한 의도(?)에 의해 많이 하고있다.


하지만 오늘 소개할 방법은 기존의 방법을 사용할 수 없는 환경에서

미국(US) 프록시가 아닌 우리나라(S.Korea) 프록시를 이용하여 해외에 접속해보고자 한다.


또한 왜 이 짓을 해야하는지도 한번 알아보자.


# 문제상황

1. 목표 시스템은 PHP 환경이며, fopen, file_get_contents이 URL을 통해 외부자료를 참조하는 것을 막았다.

2. 외부와 연결이 가능한 것은 cURL 뿐이지만, 공교롭게도 서버 설정이 해외 접속을 완전히 차단하고 있다.

3. 나는 REST(URL을 이용한 GET/POST 전송) 환경으로 미국(US)에 소재한 서버에서 데이터를 받아와야한다.


# 해결하기

이러한 상황에서 프록시를 사용한다면 일반적으로 사용하는 미국(US) 프록시에 의한 우회를 생각하기 쉽다.


그런데 뭔가 이상하다. 모든 해외 접속을 차단했는데 미국 프록시를 사용할 수 있을까?

지나가던 개가 웃는다.


그럼 어떤 식으로든 서버 측에서는 한국에 소재한 컴퓨터(IP 주소)끼리만 통신할 수 있다는 뜻이다.


<우리가 받아야 할 자료, 서버위치: 미국(US)>


{ "foo": true, "bar": false, "blah": "blah blah" }


<서버측에서 PHP와 cURL로 요청하는 예시, 서버위치: 한국(S.Korea)>


$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, (목표 주소));
(생략)

$result = curl_exec($ch);
curl_close($ch);


이런 환경에서 아무리 국내 서버에서 요청을 해봤자, 헛수고에 불과할 뿐이다.


그렇다면 어떤 방법을 쓰면 될까?

내 서버가 해외에 접속할 수 없다면, 해외에 접속할 수 있는 컴퓨터를 거치면 된다.


이를 위해 cURL 요청 시 아래와 같은 내용을 하나 추가한다.


curl_setopt($ch, CURLOPT_PROXY, "(해외접속이 가능한 국내 프록시 주소)");


이로써 미국(US) 서버와 한국(S.Korea) 서버 간의 접속은 성립된다.


# 언제 쓰는거?

소셜 네트워킹이나 다른 기능을 지원하는 서비스와

자신의 서버(웹호스팅)을 연결할 때 해외 접속이 완전 차단된 환경에서 사용하게 된다.


이러한 방법을 통해 해외 접속이 지원되는 환경으로 갈아타지 않고도 즉석에서 적용이 가능하다.

하지만 임시방편에 불과함으로 서비스 트랜젝션이 상승할 시에는 해외접속이 지원되는 온전한 서버로 갈아타야한다.


# 응용 분야

국내에서 외국이 아닌 국내 프록시를 사용하는 이유 중에 하나는 부하 분산이다.

이 글에서는 단순히 해외 접속용도만을 다루었지만 부하 분산을 위한 프록시 서버 사용법에 대해서도

알아볼 분들은 찾아서 알아보면 좋겠다. 키워드: 로드 밸런싱, 로드 밸런서