미니PC 세팅 및 네트워크 세팅
| topics | 400-인프라 & 아키텍처 800-프로젝트 805 미니서버 구축기 |
| types | 실습 도구 |
| contexts | 프로젝트 |
| tags |
미니PC를 서버로 활용하기 위한 기본 OS 설정과 네트워크 구성
기본 OS 세팅
본인의 경우 당근에서 미니PC를 구매하여 배란다에 연결했다.
참고: https://chobopark.tistory.com/549

서버컴 세팅
현 서버를 배포용 뿐만 아니라 NAS 같은 네트워크 스토리지로 쓸 예정이었다. 때문에:
- SSH 접속을 통해 서버 컨트롤
- SMB를 이용해 미니서버를 NAS처럼 사용
FTP, NFS가 아닌 SMB를 선택한 이유
나는 Mac, Android, iPad를 사용한다.

| 프로토콜 | Mac | Android | 비고 |
|---|---|---|---|
| NFS | O | X | 갤럭시 파일앱에서 미지원 |
| FTP | O (읽기전용) | O | Mac에서 업로드 불가 |
| SMB | O | O | 양쪽 다 완벽 지원 |
왜 SMB냐면: Mac 공식 홈페이지에 FTP는 파일 업로드가 불가능하다고 나와있고, Android에서도 스트리밍 같은 편의가 SMB가 더 좋다.
SSH, SMB 라이브러리 설치 및 방화벽 허용
주의: SMB1은 보안 취약점이 많으므로 SMB2를 min protocol로 설정해야 한다.
[global]
server min protocol = SMB2
기본 포트:
| 서비스 | 포트 |
|---|---|
| SSH | 22 |
| SMB | 445 |
네트워크 세팅
내부망 확인
서버를 외부에 공개하려면 포트포워딩이 필요하다. 먼저 ==현 공유기가 인터넷과 맞물려있는 엔드포인트인지 확인==해야 한다.
SK의 경우 일반적으로 192.168.45.1 또는 192.168.75.1 게이트웨이를 사용한다.

WAN IP 주소가 해당 공유기의 IP이다. 바로 인터넷과 연결되어 있다면 https://ip.pe.kr/ 에서 확인한 IP와 일치해야 한다. 192.~로 되어있다면 내부 IP이다. 즉 상위에 다른 공유기나 스위치가 있다는 것이다.
나의 경우 망이 아래와 같이 구성되어 있었다:

해결 방법:
- 공유기1과 공유기3을 2중으로 포트포워딩
- 공유기1을 bridge 모드로 변경
| 모드 | 설명 |
|---|---|
| Bridge | 그냥 전달만 해준다. 하위 공유기에 각각 공인 IP 할당 |
| NAT | 하위 네트워크에 내부 IP 할당. 동적으로 NAT table로 매핑 |
왜 bridge 모드를 선택했냐면: 배포하면 IP가 공개될 것이고, 전체 엔드포인트가 공개되는 것보다 미니PC에 연결된 엔드포인트만 공개되는 것이 보안적으로 유리하다고 판단했다.
편의사항
Hairpin 설정
같은 네트워크에서 공인 IP로 접속하면 접근이 안 된다. 같은 망 안에 있는 서버는 외부로 보내지 않기 때문이다.
내부에서는 내부 IP, 외부에서는 외부 IP... 귀찮지 않아?
해결: 공유기 설정에서 Hairpin 활성화
SSH 프로필 설정 (Mac)
접속할 때마다 키나 비밀번호를 치는 건 귀찮다. 터미널에 프로필을 설정하면 해결된다.
- 환경: iTerm2
- Command:
ssh -i 비밀키 -p 포트 사용자명@ip

shortcut까지 설정하면 딸깍으로 서버에 접속된다.
특정 사용자 sudo 비번 생략
권한 확인
특정 사용자는 관리자 권한을 가지고 있어야 한다.
sudo visudo
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
- root: 루트 사용자
- %: 그룹
- 형식: 적용호스트 = (모든 그룹: 모든 사용자) 실행가능한 명령
id 명령어로 현재 사용자와 그룹 확인:
uid=1000(mandugohigh) gid=1000(admin)
비번 생략
sudo visudo
NOPASSWD 설정 추가:
mandugohigh ALL=(ALL) NOPASSWD: ALL
왜 이렇게 했냐면: 매번 비번 치기 귀찮다.
단, 보안 위험이 있어서 비밀번호 접속 비활성화 필수 (pubkey 인증만)
sudo vi /etc/ssh/sshd_config
PermitRootLogin no # root 비활성화
PasswordAuthentication no # password 비활성화
PubkeyAuthentication yes # Key authentication 활성화
주요 명령어
# 방화벽 확인
sudo ufw status
# 포트 리스닝 확인
sudo netstat -tlnp
# 패킷 캡처
sudo tcpdump -n -i any port 445 -c 50
관련 문서
- 서버 보안강화 - 접근 - 보안 설정 상세
- 미니서버 - 아키텍처 정리