지난글에서 사설 ip로는 외부에서 접근이 불가능하다고 했었는데, 외부에서 특정 기기에 접속하려면 어떻게 해야 할까?
외부의 네트워크에서 내부 기기로 접근이 가능하게 만들기 위해 하는 세팅이 포트 포워딩이다. 외부에서 접근이 가능한 것은 공인 ip뿐인데, 이 공인 ip를 사용하는 공유기에는 다수의 기기가 연결되어 있다. 따라서 특정 포트로의 요청을 특정 기기로 포워딩 해주는 것이 포트 포워딩이다.
이 설정은 공유기 설정페이지에서 간단히 할 수 있는데, iptime의 경우 192.168.0.1이다.
기본 id, password
id: admin
pw: admin
기본 계정 정보는 로그인 한 후 [고급설정] - [시스템 관리]에서 변경이 가능하다.
포트포워딩 설정에 앞서, 우선 DHCP 고정할당을 설정해주어야 한다. 공유기가 사설 ip를 발급할 때 유일성을 보장해야 하는데, 이 발급 과정을 동적으로 구성하여 새로 접속한 기기에 사용하고 있지 않은 사설 ip를 발급해주고, 접속이 중단된 기기에 부여했던 사설 ip를 회수한다. 따라서 아무 설정도 하지 않았을 때 사설 ip는 공유기에 연결 될 때마다 바뀔 수 있다. 그러나 포트 포워딩은 내부 ip 주소를 통해 설정하기 때문에, ip가 바뀌면 엉뚱한 기기로 포워딩이 일어날 수 있다. 따라서 특정 ip를 한 기기에 고정으로 할당하도록 설정해야 한다.
[고급설정] - [DHCP 서버 설정]으로 이동하여 외부 접속을 허용할 기기를 찾아 ip를 고정해준다.
HostName으로 기기를 구분해서 고정 DHCP 설정을 해주면 이제 해당 ip(위에서는 192.168.0.5
)는 라즈베리파이에 고정 할당 된다.
고정 할당 설정이 끝났다면, 포트 포워딩 설정을 해주면 된다.
라즈베리파이에서 따로 설정하지 않았다면, ssh는 22번 포트를 통해 접근해야 하므로 내부 포트는 22, 외부 포트는 임의로 설정하면 된다. 0~1024는 well-known port 이므로 피하는 것이 좋고, 보안상 8080등 흔한 번호로는 설정하지 않는 것을 추천한다. 이 때 설정한 외부 포트를 통해 외부에서 접근하게 되니까 기억해두자!
ssh <ip> -p <port number>
# ex) ssh 142.250.76.142 -p 1234
ssh 기본 포트는 22번으로, 포트 번호를 기재하지 않으면 22번 포트로 연결을 시도한다. 하지만 우리가 설정한 외부 포트는 따로 있으므로 -p
옵션을 통해 포트 번호를 직접 기재한다.
처음 이렇게 접속을 했더니, 비밀번호를 계속 치라고 했다. 아무리 맞는 비밀번호를 쳐도, Permission denied가 뜨면서 연결을 할 수 없다는 것이다... 그래서 ssh 공개키를 등록해봤는데, 여전히 비밀번호 입력창이 뜨고 접속할 수 없었다.
로컬에서는 접근이 가능했던 상황이라 로컬로 접근해서 ssh 접속 로그를 확인해봤다.
cat /var/log/auth.log
Invalid user... 하고 내 맥 유저 이름이 써 있었다.
원인은 username을 쓰지 않아서였다.
생각해보니까 계정 정보로 접속을 시도할텐데 유저를 기재하지 않으면 접속할 수 없는게 당연한거였다...
ssh pi@<public-ip-address> -p <port-number>
-> 해결.