언제까지고 라즈베리파이에 모니터 연결해서 쓸 순 없으니 ssh를 통해 데스크탑에서 우분투에 접속하는 방법을 알아봅시다.
먼저 ubuntu계정에서 root 계정으로 변경합니다.
sudo -s
비밀번호를 입력하면 root계정으로 변환됩니다.
다음으로 apt-get을 업데이트해주고
apt-get update
ssh를 설치합니다. openssh-server는 우분투라면 기본적으로 깔려있는데 만약 없으면 깔아줍시다.
apt-get install openssh-server
ssh 클라이언트도 깔아줍시다
apt-get install ssh
서비스를 재시작합니다.
service ssh restart
이제 방화벽을 열어야합니다. ssh는 22번 포트를 사용하니 22번 포트를 열어줍시다.
sudo ufw enable
sudo ufw allow 22
ssh 설정이 끝났습니다. 먼저 공유기에 연결된 기기간의 연결이 잘 되는지 봅시다.
태블릿으로 공유기 wifi에 연결하고 라즈베리파이에 접속해보겠습니다.
ssh client는 connectBot
을 사용했습니다.
[계정이름]@[ip주소]
형식으로 접속하면 됩니다. ip 주소는 처음 우분투에 연결됐을 때 나온 eth0의 ip주소를 사용하면 됩니다.
[로그인시 출력되는 화면]
ip주소를 까먹으셨다면 다음과 같은 방법으로 ip를 알아낼 수 있습니다.
ip addr
사용ip addr
[ip addr 출력 화면, eth0의 inet부분을 보면 된다.]
ifconfig
사용혹은 ifconfig
를 사용하면 ip를 확인할 수 있는데,
ifconfig
는 net-tools
를 설치해야 사용할 수 있습니다.
sudo apt-get install net-tools
ifconfig
혹은 간단하게 공유기 관리자 페이지에 접속하면 됩니다. 공유기와 연결된(wif 또는 랜선으로 연결된) 기기에서 브라우저를 통해 관리자 페이지에 접속할 수 있는데, iptime
등의 공유기를 쓰신다면 192.168.0.1
에 접속하면되고, 저의 경우 skt 인터넷을 사용해서 192.168.45.1
에 접속해야 관리자 페이지가 나왔습니다. 공유기 주소를 모르겠다면 사용하는 인터넷회사에 전화해서 물어보세요.
[공유기와 유,무선연결된 기기들을 볼 수 있다. 맨 아래 ubuntu의 ip가 보인다.]
성공적으로 접속했습니다. 태블릿의 가상ip(192.168.45.230
)에서 login했다는 마지막 문구를 볼 수 있습니다.
데스크탑에서 사용할 ssh 클라이언트는 PuTTY를 사용하겠습니다.
제 데스크탑 같은 경우엔 같은 공유기에 연결되어 있지 않기 때문에 같은 가상 ip로 우분투에 접속할 수 없었습니다.
[같은 가상ip로는 접속할 수 없다.]
따라서 공유기를 경유해 우분투에 접속해야하고 공유기를 포트포워딩해줘야합니다.
저희집 인터넷 연결 구조입니다. 정확히 같진 않고 필요한 부분만 그렸어요.
위 그림처럼 192.168.45.69
, 192.168.45.230
는 실제 ip가 아니라 공유기가 임의로 부여한 ip입니다. 각 기기마다 실제 ip를 부여하는건 낭비입니다. 부여할 수 있는 실제 ip는 제한되어있으니까요.
[내부망끼리의 연결]
공유기는 연결된 기기들에 가상 ip를 부여하고 관리합니다. 앞서 connectBot에선 가상 ip를 통해 ssh 연결을 만들었죠. 태블릿에서 연결하려한 192.168.45.69
는 라즈베리파이로 연결된다는 사실을 공유기는 알고 있기 때문에 연결이 가능했습니다.
하지만 공유기 외부망에서 공유기 내부망에 접속할 땐 사정이 다릅니다. 외부망이 보기에 192.168.45.69
는 알 수 없는 ip입니다. 따라서 외부망에서 공유기 내부망의 특정 기기에 접근하려면 먼저 공유기에 접속해야합니다. 공유기는 외부와 연결하기 위한 1개의 외부 ip와 내부에서 연결하기 위한 1개의 내부 ip를 가집니다. 관리자 페이지에 접속할 때 사용한 192.168.45.1
은 내부 ip이고, 관리자 페이지 내에 외부 ip가 기록되어있습니다.
[관리자 페이지의 네트워크 상태 정보창]
WAN IP 주소
가 바로 공유기의 외부 ip 입니다. 외부망에서 공유기에 접속할 땐 이 ip를 사용합니다.
그렇다면 외부망에서 공유기 내부망의 특정 기기 주소는 어떻게 알 수 있나요? 알 수 없습니다. 다만 port번호를 통해 연결을 구분해줄 수 있습니다. "192.168.75.198:22
는 192.168.45.69
로 연결된다." 같은 규칙을 공유기에 만들어놓으면 외부의 접속을 내부망의 특정 기기로 연결해줍니다. 이런 규칙을 만드는 것을 포트포워딩이라고 합니다.
그럼 이제 포트포워딩을 직접 해봅시다.
[공유기의 관리자 페이지에 접속해 포트포워딩 메뉴를 찾는다.]
리스트에 외부포트, 내부 ip, 내부포트를 입력해주면 됩니다. SSH는 22번 포트를 사용하니까 22번 포트로 연결하면 되겠죠. 위의 포트포워드는 "외부에서 22번 포트로 접근하면 192.168.45.69
의 22번 포트로 연결해" 라는 뜻입니다.
포트포워딩이 끝났으니 외부망(데스크탑)에서 라즈베리파이에 접근해봅시다.
[PuTTY에 192.168.75.198로 접속, raspi라는 이름으로 주소를 저장해놨다.]
[접속 성공]
외부망에서 내부망에 접근하는데 성공했습니다.
ip주소를 보면서 뭔가 이상함을 느꼈다면, 정답입니다. WAN IP는 외부 ip인데, 192.168.***.***
의 형태를 띄고있죠. 그렇습니다. 공유기의 외부 ip에 가상 ip가 부여되어있습니다. 이것은 모뎀에서부터 WAN이 NAT 모드
로 설정되어서 공유기에 가상 ip를 부여해 집에 연결된 인터넷에 하나의 ip만 사용하도록 되어있기 때문입니다. ( 다시보면 모뎀에 직접연결된 데스크탑도 가상 ip가 부여된 것을 볼 수 있습니다. ) 이런 경우 외부 인터넷(집 인터넷 말고 PC방, 모바일 데이터 등)에서 공유기에 접근할 수 없습니다. 따라서 NAT 모드
가 아니라 브릿지 모드
로 바꿔줘야하는데... 이 부분은 당장은 필요없기 때문에 나중에 기회가 된다면 다루겠습니다.
좋은 글 잘 읽었습니다!
저도 의문점과 비슷한 상황이였는데, 저 같은 경우는 모뎀이 SKT 라우터이고, 거기에 랜선으로 TP Link M4 라는 다른 공유기(라우터)를 연결해서 인터넷을 활용하고 있기 때문이였어요.
이런 구조라고 하면 되려나요.
그래서 저는 라우터 관리 페이지에서도 포트포워딩을 해주고, 모뎀(SKT) 관리페이지에서도 포트포워딩을 해줘서 외부망에서 집으로 연결이 가능하게끔 작업해두었습니다.
제 사례도 공유드리려고 댓글남깁니다 ㅎㅎ