Home Server 만들기

집 서버를 만들게 된 배경

집 컴퓨터를 교체하고 지인의 컴퓨터를 교체해주면서 부품들이 여럿 남게 되는 상황이 생겼는데, 그냥 버리기 아까워 컴퓨터를 한대 더 조립을 하게 되었다. 사양은 Intel(R) Celeron(R) CPU G39304G, 250Gb 이다.

컴퓨터를 조립 후 막상 사용할 곳이 없어 고민하던 중에 aws 프리티어도 끝났겠다 싶어 개발이나 테스트용으로 서버를 사용하면 좋을 것 같아 서버로 만들어보기로 했다.


1. OS 설치

OS로는 aws에서도 사용했었던 Ubuntu Server20.04 LTS로 설치하기로 했고 그에 맞춰 굴러다니던 usb를 이용해 부팅usb로 만들어 주었다.

위의 홈페이지에서 iso파일과 Rufus파일을 다운받을 수 있고, Rufus프로그램에 iso를 등록하여 usb를 부팅usb로 쉽게 만들 수 있다. 이렇게 만들어진 usb를 이용해 os를 설치 해주자!


2. 인터넷 설정

집 구조상 내방까지 인터넷선을 끌어오면 굉장히 보기 안좋아지기 때문에 내방의 컴퓨터는 wifi를 이용하고 있다. 서버를 거실에 둘 수도 없기 때문에 서버에 무선랜카드를 추가하여 wifi를 잡도록 설정해야 한다.

서버에 사용한 랜카드는 iptime A3000U모델이다. 랜카드를 꽂게 되면 서버는 해당 랜카드를 인식하지 못한다. iwconfig명령어를 입력하면 무선 인터페이스가 없는 것을 확인할 수 있다.

A3000U 드라이버 설치

A3000U는 리얼텍 RTL8812BU 칩셋을 이용하고 있고 이 칩셋은 리눅스 커널에서 지원을 하지 않기 때문에 별도로 드라이버를 설치해주어야 한다. 이때 공식홈페이지에는 별도의 드라이버 파일이 존재하지 않기 때문에 github의 올라와있는 프로젝트를 이용해 설치 해주면 된다.

서버에 무선랜카드만 꼽았다면 인터넷이 되지 않기 때문에 따로 인터넷을 연결해준 뒤 설치해야 한다.

# git clone
$ git clone https://github.com/RinCat/RTL88x2BU-Linux-Driver
$ cd RTL88x2BU-Linux-Driver

# driver compile tools
$ sudo apt-get install build-essential dkms

# compile
$ make clean && make

# install
$ sudo make install

그리고 iwconfig를 입력해보면 랜카드가 잡힌 것을 볼 수 있다.

만일 Nickname 옆에 disalbed가 존재하면 활성화가 되지 않은 상태로 ifconfig 무선인터페이스명 up을 통해 활성화 해주면 된다. 이때 무선 인터페이스명은 iwconfig나, sudo lshw -C Network로 확인할 수 있다.
나같은 경우는 wlx705dccfa5cb4가 무선인터페이스명 이고 ifconfig wlx705dccfa5cb4 up을 입력하면 된다.

WPA 프로그램 설치

$ sudo apt install wpasupplicant -y

wifi 설정

ubuntu 20 전에는 sudo vi /etc/network/interfaces를 이용하여 정의 해주었었는데 20에서는 netplan을 통해 yaml파일로 정의해주면 된다.

# vi로 yaml open
sudo vi /etc/netplan/00-installer-config.yaml

다른 블로그들을 보면 00-installer..이 아닌 50-installer-... 인 경우가 존재하는데 개인 마다 파일명은 다를 수 있는 것 같다. netplan/ 까지 입력후 tab을 이용하여 존재하는 파일을 열면 된다.

만일 존재하지 않는다면 sudo netplan generate 으로 생성해주면 된다.

network:
  ethernets:
    enp2s0:
      dhcp4: true
  version: 2
  # 아랫 부분을 추가해주면 된다.
  wifis:
    무선인터페이스명:
      addresses: [192.168.0.142/24]
      gateway4: 192.168.0.1
      nameservers:
        addresses: [8.8.8.8,8.8.4.4]
      optional: true
      access-points:
        "wifi 명":
           password: "wifi 비밀번호"
      dhcp: false

이때 공유기의 포트포워딩 기능을 이용하여 외부에서 접속을 할 수 있도록 해줄 건데 dhcp를 이용한다면 매번 ip가 바뀔 수 있기 때문에 고정 ip로 설정해주었다.

설정 적용

# apply
sudo netplan apply

설정 확인

# ip 확인
ip addr
ip route

# ping, nslookup 이용해 인터넷동작 확인
nslookup google.com
ping google.com


포트포워딩과 DDNS

공유기로 iptime를 이용하고 있다면 192.168.0.1에 접속하여 네트워크 설정을 해줄 수 있다.

ssh 접속을 위해 22, http를 위해 80,443번 이렇게 3개의 포트포워딩 규칙을 추가해 주었다.

또한, ip를 이용하여 접속하기에 ip를 외우기도 어렵고 ip가 몇개월마다 주기적으로 바뀌기 때문에 그때마다 확인하기 어려울 수 있다. 이때 ddns 서비스를 이용하면 항상 같은 도메인으로 연결할 수 있다.


연결 확인

다른 컴퓨터나 어플을 이용하여 ssh접속을 한번 해보자!

$ ssh 서버접속사용자명@ddns호스트이름 -p 5555

접속이 잘 되었다면 끝이다! 만일 접속이 안된다면 ssh가 설치가 되었는지 확인하고 방화벽에서도 허용되었는지 확인 해보자.



추가 설정

1. ssh-key 설정

# 외부에서 ssh-key 생성
$ ssh-keygen -t rsa -C "description 작성"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/ssun/.ssh/id_rsa): "키 파일명"
Enter passphrase (empty for no passphrase): #비밀번호
Enter same passphrase again:

위 명령어를 통해 ssh-key를 생성할 수 있고 이 때 키 파일명, 키 파일명.pub 파일 두개가 생성된다. .pub은 공개키이며 다른 한개의 파일은 비밀키이다.

공개키를 server안으로 복사하여 이동시키자.

cd ~
mkdir .ssh
cd .ssh

# .pub파일 해당 폴더에 이동후 파일명 변경
mv 파일명.pub authorized_keys

위처럼 파일명을 변경하거나 vi 편집기를 통해 authroized_keys를 새로 만들고 안에 .pub의 내용을 붙여넣어주면 된다.

접속확인

ssh -i 비밀키명 [email protected]명 -p5555

접속이 잘되었다면 성공이다! 이 후 나는 비밀번호 로그인을 허용하지 않도록 설정도 바꾸어 주었다.

# config open
sudo vi /etc/ssh/sshd_config

# config 내용중 마지막 부분중 PasswordAuthentication을 no로 바꿔주자
# PasswordAuthentication yes
PasswordAuthentication no

2. 원격 부팅/종료

현재 서버를 개발이나 테스트용으로 사용하다보니 항상 서버가 켜져있을 필요가 없으며 조금이라도 전기세를 막고자 원격으로 부팅과 종료를 할 수 있도록 설정해주었다.

서버를 원격으로 종료시키는 건 쉽지만 부팅이 문제였는데 WOL기능을 이용하면 원격으로 킬 수 있겠지만 서버를 무선으로 작업을 했기 때문에 WOL을 사용은 할 수 없었다.

고민 끝에 바이오스의 전원공급시 자동부팅 기능을 활용하기로 했다. 우선 어플을 이용해서 원격으로 전원을 공급/차단할 수 있는 플러그를 구매했다.
네이버에 스마트 플러그라고 검색하면 많은 제품이 검색되지만 가격이 꽤 나가기에 나는 알리에서 7천원대로 구매를 하여 설치했다.

그후에 서버 바이오스에 들어가 자동 부팅기능을 활성화해주어야 하는데 이는 메인보드 제조사마다 부르는 기능명도 다르고 설정방법도 조금씩 다르기에 본인의 메인보드에 맞게 설정해주면 된다.

제조사별 명칭

# ASUS
Resotre ac power loss 

# ASROCK 
AC/Poser loss (advanced에 존재)

# MSI
Resotre after AC Power loss (advanced에 존재)

# GigaByte 
AC BACK (Power에 존재)

이로써 외부에서 원격으로 서버를 부팅시킬 수 있게 되었다!





Reference