이거 글 다 구라입니다.
학기중 LLVM관련 프로젝트를 수행하기 위해 연구실 컴퓨터에 컴파일해뒀다. 한번 컴파일하는데만 약 3시간 4시간이 걸리는 작업이라, 집에서 다시 하는것은 오바.
학교는 외부에서의 원격 접근을 굉장히 싫어하기 때문에 잠깐만 접근해 과제를 수행해보자.
제일 초기 구성은 다음과 같다.
Client = 접근 주체
Target = 접근 대상
1. SSH 를 통해 접근해보자
SSH는 원격 컴퓨터에 접근하기 위한 가장 편리한 도구다.
공유기 망에서는 당연히 접근될꺼니 ,Target Computer
는 공유기를 통해 학교망과 연결되어 있음으로, 포트포워딩을 통해 SSH서버 프로세스의 포트를 학교망으로 노출하자.
이제 해볼 수 있는 방법은 학교안에서 접근할 때, 학교 밖에서 접근할 때 두 경우만 존재한다.
이대로 되면 땡큐
(1) 학교 내부망에서 접근할 경우
해당 공유기 IP 를 통해 간편하게 접근가능했다.
(2) 학교 외부망에서 접근할 경우
외부망에선 접근할 수 없었다.
왜 접근되지 않을까?
Target Computer
에선 외부망에 접근이 가능한데, 외부망에선 접근할 수 없지?
또, 학교망 안에서는 Target Computer
접근이 가능한데 외부망에서는 접근이 안된다...?
2. 현재 얻은 정보로 구성 파악해보기
(1) Target Computer
은 외부망에 접근 가능
(2) 학교망 안에선Target Computer
에 접근 가능
(3) 학교망 밖에선Target Computer
에 접근 불가능
(2)
으로 미루어 보아, 학교망 내에 대해서는 따로 패킷을 막지 않는 것 같다.
(3)
으로 미루어 보아 학교망과 외부망 사이에 존재하는 라우터에서 패킷을 막고 있는것 같다.
분명히 (3)
에서는 외부망에서 들어오는 패킷을 블락하고 있었는데,(1)
에선 어떻게 외부망과 연결된 컴퓨터로 부터 데이터를 주고 받을 수 있었을까?
방화벽이 하나 있는 것 같다.
그럼, 어떻게 할 수 있는 방법이 없으려나?
아니다.
3. 아이디어
학교망 라우터 속이기
(1)
이 동작할 수 있었던 이유가 뭘까?
정확한 구성은 뭔지 모르겠지만, 일단 외부망과 학교망 사이의 라우터에 내부 호스트 -> 외부 호스트로 이어지는 커넥션을 테이블에 저장해두고, 외부망에서 패킷을 들어올때 해당 테이블을 확인해 패킷을 허용해주는 기능이 있을것이란 걸 유추할 수 있겠다.
그러면, 내부망에서 외부망에 미리 커넥션을 만들어둠으로써 학교망의 라우터를 속이고, 해당 커넥션을 통해 외부망에서 SSH 접근을 하도록 하면 될거 같은데?
4. 실천
커넥션을 만들어 둬야한다....
해당 커넥션은 학교망 라우터를 속이기 위해 Target Computer
에서 외부망의 호스트로 연결해놔야한다. 커넥션이 끊어지면 다시 Target Computer
를 통해 외부망의 호스트에 연결해야하는데?
아 불편하지.
그럼 그냥 EC2를 사용해보자.
먼저, EC2 하나 띄워두고, SSH 리모트 터널링을 이용해 한번 더 포트포워딩을 해보자.
이제 Target Computer
의 SSH 서버 포트가 EC2 인스턴스의 포트로 포트포워딩 됐다.
다 구라지만, 한번 해보자. 재밌었다.