구조는 대략 위와 같다.
이때, 집에서도 회사의 물리 server 에 ssh 로 접근하기 위해선 다음과 같은 과정이 필요하다.
우선 서버의 사설 IP가 변경되지 않도록 라우터에서 고정 IP를 할당하거나 서버 자체에서 정적 IP를 설정한다.
나는 서버 자체가 편하기 때문에 서버에서 설정해줬다.
ip addr
ifconfig
ls /sys/class/net
위 셋중 하나 골라서 쓰면 된다.
일반적으로 Ubuntu에서는 en
으로 시작하는 인터페이스 이름을 사용한다.
# 설정 파일 목록 확인
ls /etc/netplan/
아마 00-installer-config.yaml
, 01-network-manager-all.yaml
와 비슷한 이름이 존재할 것이다.
기존 DHCP 설정을 고정 IP로 변경한다.
참고로 YAML 파일은 들여쓰기가 매우 중요하므로 스페이스( 2칸씩 )로만 들여쓰기를 하고 탭은 사용하지 않는 것을 추천한다.
network:
version: 2
renderer: networkd
ethernets:
ens33: # 실제 인터페이스 이름으로 변경
dhcp4: no
dhcp6: no
addresses:
- 192.168.1.122/24 # 원하는 고정 IP 주소/서브넷 마스크
routes:
- to: default
via: 192.168.1.1 # 게이트웨이 주소 (라우터 IP)
metric: 100
nameservers:
addresses:
- 192.168.1.1 # DNS 서버 (보통 라우터 IP)
- 8.8.8.8 # Google DNS (백업)
- 8.8.4.4
search:
- local.domain
optional: false # 부팅 시 이 인터페이스를 반드시 활성화
설정 파라미터 설명:
ens33
: 네트워크 인터페이스 이름 (실제 인터페이스명으로 변경 필요)
dhcp4
: no: DHCP 자동 할당 비활성화
addresses
: 할당할 고정 IP 주소와 서브넷 마스크 (CIDR 표기법)
routes
: 네트워크 라우팅 설정, 기본 게이트웨이 지정
nameservers
: DNS 서버 주소 설정
# 설정 파일 문법 검사
sudo netplan try
# 설정 적용
sudo netplan apply
# IP 주소 확인
ip addr show
# 네트워크 연결 테스트
ping -c 4 8.8.8.8
아마 sudo netplan try
를 실행했을 때 too open
WARNING 을 만날 수 있다. 이땐,
라우터 별로 다르겠지만 보통 http://192.168.1.1/
, http://192.168.0.1/
등 회사별로 찾아보면 나온다.
무튼 해당 url 로 라우터 관리자 패널에 접속하여 다음 규칙을 추가한다.
외부 포트: 2222 (기본 SSH 포트인 22 대신 보안을 위해 변경 권장).
내부 IP: [서버의 사설 IP] (예를 들어: 192.168.1.122)
내부 포트: 22 (서버의 SSH 포트).
프로토콜: TCP.
예시 규칙: 외부 포트 2222 → 내부 IP 192.168.1.122:22.
그리고 다시 서버로 넘어가서 다음과 같이 무조건 설정해줘야 무차별적으로 포트로 접속하는 것을 막을 수 있다.
# SSH 설정 파일 편집
sudo nano /etc/ssh/sshd_config
# 권장 설정:
Port 22 (기본값, 외부에서는 다른 포트로 접근)
PermitRootLogin no
PasswordAuthentication no (키 인증 사용 시)
AllowUsers [your_username]
# SSH 서비스 재시작
sudo systemctl restart sshd
# UFW 방화벽 활성화
sudo ufw enable
# SSH 포트 허용
sudo ufw allow 22/tcp
# 방화벽 상태 확인
sudo ufw status
Termius 와 같은 앱에서 다음 명령어 실행
ssh 사용자명@121.141.19.193 -p 2222
공인 IP가 유동적이라면 DDNS(Dynamic DNS) 서비스(예: No-IP, DuckDNS)를 설정해 도메인 이름으로 접속할 수 있다.
비표준 포트 사용: 외부 포트를 22 대신 2222나 약속한 포트으로 변경해 무작위 공격을 줄일 수 있다.
SSH 키 인증: 패스워드 대신 공개키를 사용해 인증하도록 서버를 설정한다.
방화벽 설정: 라우터/서버 방화벽에서 SSH 포트(22) 외 불필요한 포트를 차단한다.
라우터 지원 확인: 일일이 라우터는 포트 포워딩을 지원해야 한다.
공인 IP의 유동성: ISP(인터넷 서비스 제공자)가 공인 IP를 자주 변경하는 경우 DDNS가 필수이다.
VPN 사용: 라우터/서버에 VPN 서버를 구축하고, VPN 연결 후 사설 IP로 직접 접속.
역방향 SSH 터널링: 참고로 이 방법은 중간 서버(공인 IP 고정)가 필요하다.
# 서버에서 실행 (중간 서버: user@jump-server.com)
ssh -R 2222:localhost:22 user@jump-server.com
이후 iPad에서 ssh -p 2222 user@jump-server.com
으로 접속.