Search

고객사에 라즈베리 파이를 넣고 접속 방법

생성일
2024/03/21 01:17
수정일
2024/04/03 14:05
태그
IT
리눅스
2 more properties
고객사에 종종 서버나 라즈베리 파이를 넣고 싶을 때가 있다. 문제는 고객사 내부망으로 들어갈 때, 이에 대한 포트 포워딩 작업이 늘 이슈였다.
최근에 다시 라즈베리 파이를 개발할 일이 생겨 이 문제를 쉽게 해결할 방법을 고민하던 차이다. 그러던 중 ‘리버스 터널링 ssh’라는 것을 알게 되었으니…
서버 → 라즈베리파이(외부IP, 123.123.123.123)
일반적으로 이런 상황에서 서버에서 라즈베리 파이로 접속 방법은 다음과 같다.
user@server~$ ssh rasp@123.123.123.123
Bash
복사
그런데, 이렇게 하기 위해선 라즈베리 파이의 ssh 접속 포트가 외부에 노출되어 있어야 한다. 또한 해커들의 수많은 해킹 시도를 작은 라즈베리 파이가 홀로 감내해야 하는 위험부담이 있다.
더욱이 라즈베리 파이가 고객사의 ‘내부망’으로 들어가는 경우에는 고객사에서 포워딩을 해줘야만 접속이 가능했다.
그런데 나는, 멍청하게도, ssh 리버스 터널링이라는 신문물을 이제서야 발견하고 만 것이다.
라즈베리파이 → 서버(외부 IP: 100.100.100.100)
리버스 터널링은 반대로 라즈베리 파이의 ssh가 외부 서버를 통해 접속할 수 있도록 한다.
rasp@rasp~$ ssh -R 2222:localhost:22 user@100.100.100.100
Bash
복사
형태는 마치 라즈베리에서 서버의 ssh에 접속하는 것 처럼 보인다. 하지만 실상은, “서버에서 user 계정으로 ‘서버의’ 2222번 포트를 통해 라즈베리에 접속하게 해줘” 이다.
이렇게 라즈베리파이에서 명령어를 넣은 뒤 서버에서 다음과 같이 접속을 할 수 있다.
user@serv~$ ssh localhost -p 2222
Bash
복사
서버는 자기 자신의 2222번 포트에 ssh로 접속을 시도한다. 그러면 놀랍게도 라즈베리 파이로 접속하는 진귀한 모습이 연출되니…
앞에서 라즈베리 파이에서 설정한 명령어의 파라미터를 살펴보자.
rasp@rasp~$ ssh -R $tunneling_port:$reversed_ip:$rasp_port $server_user@$server_ip
Bash
복사
$tunneling_port: 서버에서 ‘어떠한 포트’로 라즈베리로 접속할 것인지에 대한 설정이다. 그러니까, 서버의 ‘어느 포트’를 사용할 것인지를 ‘라즈베리’에서 설정한다.
$reversed_ip : 서버에서 ssh를 통해 어느 주소로 ssh 연결을 ‘토스’할지에 대한 설정이다. 위에서는 이 자리에 localhost 를 적었다. 그러니까, “서버에서 2222번 포트를 통해 나에게 오면, 내가 localhost의 ssh에 접속하게 해줄게” 이다.
이를 이용하면 자기 자신뿐만 아니라 라즈베리 주변에 다른 서버의 ssh에 접속도 가능하다. 이른바 라즈베리가 ssh 중계기가 될 수도 있는 셈이다.
$rasp_port : 라즈베리파이에 설정된 ssh 포트다.
$server_user: 터널링을 할 때 ‘어느 유저’를 통해 올지를 지정한다.
$server_ip : 외부에 노출된 서버 아이피이다.
서버의 ssh에 포트가 22번이 아닌 경우에는 -p $server_port 를 뒤에 적어주면 된다.
이렇게 하면 라즈베리는 ‘서버’에 ssh에게 ‘터널링 설정’을 요청한다.
라즈베리에 crontab -e 를 통해 아래와 같이 해놓으면, 라즈베리파이가 재기동을 할 때마다 터널링이 설정된다.
@reboot ssh -R 2222:localhost:22 user@100.100.100.100
Bash
복사
또는 autossh 를 통해 터널링 세션이 끊어지더라도 자동으로 연결할 수 있도록 할 수도 있다.
이제는 인정하려 한다.
난 여지껏 바보였다….
*참고로, 터널링을 하더라도 외부에서 서버의 2222번 포트에 ssh 접속을 시도한다 해서 되지는 않는다. 내부서에서 ‘localhost’의 2222번 포트로 접속을 할 때 터널링이 이루어진다(TEST: UBUNTU 20.04).
이 외에 적절한 보안 설정만 이루어지면, 쾌적하게 외부망에 있는 장비들의 운용이 가능해지겠다.
또한 터널링을 하더라도 접속 권한(인증키)은 ‘서버’에게 있어야 한다. 터널링을 통해 온다고 해서 무조건 문을 열어주니는 않으니, 안심하자.