NAT Network 설정과 포트 포워딩

어댑터 1을 NAT 네트워크로 설정해주고 자동으로 잡히는 MyNatNetwork를 확인한다.

지난 시간에 준비한 포트 포워딩 세팅에서 외우기 편하도록 게스트 IP의 4번째 Octet을 105로 수정해주었다.

PuTTY에서 포트 포워딩에서 설정했던 호스트 IP와 호스트 포트를 입력하고 저장한다.

apt 명령어를 통해 network-manager를 설치한다.

설치가 되었다면 /etc/netplan 으로 이동해 파일이 있음을 확인한다.

예상치못한 변수에 대비해 복사본을 생성해 백업을 해둔다.

$ sudo nano 01-network-manager-all.yaml

'나노'라는 TUI 에디터로 파일을 열고 위와 같이 수정한다.

 

줄바꿈을 할 때 Tab키가 아닌 반드시 Space 두 번으로 들여써야 한다.

 

작업이 끝나면 Ctrl+O를 입력해 파일명은 그대로 덮어쓰기 한다.

Ctrl+X를 입력해 에디터를 종료한다.

cat 명령어로 확인.

$ sudo netplan try

Enter를 눌러 세팅을 유지한다.

적용을 위한 apply를 하고 stop과 start를 수 차례 반복해준다.

네트워크 연결 여부를 확인할 때는 $ sudo apt update

성공적으로 업데이트가 된다. NAT Network의 1번 어댑터로 인터넷에 접근이 되었다.


호스트로부터 포트 포워딩을 통해 고정 IP 서버에 접근하기

Before

GuestOS와 HostOS 사이에 Host-Only로만 통신이 된다.

서버는 고정 IP로 설정해야 한다.

하지만 GuestOS가 고정 IP면 연결이 되지 않는다.

 

After

포트 포워딩을 해서 고정 IP의 GuestOS와 HostOS를 통신하게 한다.

그럼 Host-Only는 필요없는가? 필요하다. 왜?

GusetOS에 Apache 서버를 설치하게 되면

1) 10.0.2.105는 접근 안 됨

2) 127.0.0.1은 localhost로 인식해서 안 됨

유일한 방법은 192.168.56.5 (Host-Only)로 연결하는 것

 

결론: NAT Network와 Host-Only 두 가지를 같이 써야 한다.

 

위에 언급된 "HostOS는 GuestOS가 고정 IP면 연결할 수 없다"를 해결한다.

PuTTY에서 IP 127.0.0.1, 105번 포트로 진입했다.

포트 포워딩에 의해 호스트 IP와 호스트 포트가 게스트 IP와 게스트 포트로 변경되기 때문에

실질적으로는 GuestOS의 1번 어댑터(NAT Network)의 고정 IP인 10.0.2.105, 22번 포트로 연결된다.


GuestOS 간의 통신

1. VirtualBox 관리자에서 Ubuntu Desktop을 복제한다.

2. 복제본을 삭제하되 완전 삭제가 아닌 목록에서 보이지 않게만 삭제한다.

C:\My Virtual Machines 경로에서 'Ubuntu Desktop 복제'라고 되어있는 폴더를 확인하고 폴더명을 고친다.

이후 해당 폴더 안에 있는 두 개의 아이콘의 이름을 복제 -> 1로 수정해주고,

파란색 아이콘의 Ubuntu Desktop1.vbox 파일을 텍스트 편집기에서 연다.

 

9번째 줄의 Machine 태그의 name 속성에서 또한 복제 -> 1로 고치고,

12번째 줄의 HardDisk 태그의 location 또한 해당 부분만 수정하고 파일을 저장한다.

다시 VirtualBox 관리자로 돌아와서 [도구 -> 추가] 로 수정한 .vbox 파일을 연다.

두 개의 가상머신을 모두 실행하고, Ubuntu Desktop1 쪽의 고정 IP의 마지막 Octet을 106으로 수정한다.

TUI의 방법으로는 Terminal에서

 

$ cd /etc/netplan

$ sudo nano 01-network-manager-all.yaml

 

로 접근해 파일을 수정하는 방법도 있다.

참고용 nano 실행 화면. 위의 GUI 혹은 nano 둘 중 하나의 방법으로 IP를 바꾸면 된다.

수정 후 cat 명령어로 확인.

Enter 입력 후 apply, stop, start 연속적으로 진행한다.

수정 완료된 ip 확인

105와 106에서 서로에게 핑 때려보기(GuestOS 간의 통신)

HostOS에서의 접근을 위해 Ubuntu Desktop1을 위한 포트 포워딩 설정을 추가해준다.

PuTTY에서 설정하는 스크린샷이 누락되었으나

IP 자리에 localhost인 127.0.0.1을 넣고 포트 넘버에 SSH의 포트인 22를 입력하면 된다.

GuestOS인 Ubuntu Desktop1에 성공적으로 접속한 모습.

구분하기 편하도록 테마를 또 다르게 설정했다.

ip a 명령의 결과. enp0s3의 IP 부분에 10.0.2.106이 출력된다.


Ubuntu Server 설치

VirtualBox 관리자에서 새로 만들기 클릭.

위와 같이 입력.

기타 항목들은 다음을 클릭하고, 메모리는 2GB, 하드디스크 용량은 50GB로 설정해 주었다.

생성 완료된 가상머신에서 고유 설정에 들어간다.

시스템 메뉴 마더보드 탭에서 '플로피' 해제

프로세서 탭에서 마치 CPU가 2개인 것처럼 듀얼코어로 설정한다.

저장소 메뉴 -> '비어 있음' 클릭 -> 광학 드라이브 옆의 파란 CD 아이콘 클릭 -> 디스크 파일 선택

다운로드했던 live server의 iso파일 열기.

마지막으로 네트워크 설정 확인이다.

처음엔 설치를 해야하기 때문에 HostOS를 통해 인터넷에 연결하는 방식인 NAT로 진행한다.

설정을 마치고 '시작' 버튼을 클릭하면 나오는 최초 화면이다.

서버에서 한글을 쓸 일이 없기 때문에 English로 진행.

Done * 3

캐시 업데이트를 위한 미러사이트. 그대로 Done.


이제부터 총 50GB의 하드 디스크를 Desktop 설치 때와 같이 swap, boot, root 3개의 파티션으로 분할할 것이다.

 

Tab키를 눌러 Custom storage layout에 커서를 올리고 Enter 또는 Space를 눌러 체크한다.

Tab으로 Done에 맞추고 진행.

 

Enter -> Add GPT Partition

4096M 또는 4G 입력, Format은 swap.

4096M

ext4

/boot

Size는 나머지 공간을 전부 잡기 위해 Tab.

ext4

/

방금 만든 3개의 파티션과 bios_grub으로 하드 디스크가 구성되어 있는 모습.

Done -> Continue

사용자 이름, 서버 이름, 아이디, 패스워드 입력

OpenSSH server는 추후에 별도로 설치할 것이기 때문에 체크하지 않고 진행.

부가적으로 설치할 수 있는 것들. 체크하지 않고 진행.

설치 후 업데이트 중... 아직 건드리지 않는다.

Reboot Now가 뜨면 진행한다.

Enter 키를 눌러 가상의 CD ROM을 언마운트한다.

프로세스가 끝나면 로그인한다.

이쁘다.


Install OpenSSH Server on Ubuntu Server

$ sudo apt install openssh-server

Ubuntu Desktop에서 했던 것과 같이 기타 등등 설치 및 설정 수행.

화면은 nano를 통해 IP를 수정한 후 cat 명령어로 변경되었음을 확인하고 있다.

 

이후

$ sudo netplan try -> Enter

$ sudo netplan apply

$ sudo systemctl stop network-manager

$ sudo systemctl start network-manager

$ sudo systemctl stop network-manager

$ sudo systemctl start network-manager

$ ip a 로 IP가 변경되었음을 확인.

 

$ sudo systemctl restart ssh

$ sudo systemctl enable ssh

$ sudo systemctl status ssh

서버 준비 삼총사 실행

 

NAT Network 방식을 통해 인터넷에 연결되었음을 확인하기 위해 캐시 업데이트를 실행한다.

$ sudo apt update

PuTTY를 실행해서 IP와 포트 번호를 입력 및 기타 설정 후 Open.

사정 상 105, 106... 등을 50105, 50106... 등으로 고치게 되었다. 포트 포워딩에서도 설정함.

마지막으로 로그인하고 $ sudo apt update 명령어로 인터넷 연결을 확인한다.


Shell

Shell이란 일종의 명령어 해석기로,

사용자로부터 명령어를 입력받고 번역하여 Kernel에게 전달하거나

Kernel이 사용자에게 알려야 할 정보를 번역하여 사용자에게 전달하는 역할을 한다.

 

사용자와 OS(Kernel) 사이에 위치하는 인터페이스.

 

지구에 다양한 언어가 있듯이 Shell에도 여러가지 종류가 있다.

Shell을 바꿔가며 사용할 순 있지만 동시에 여러 개를 쓸 수는 없다.

ex) Bourne Again SHell(BASH), Korn Shell, Z Shell, C Shell

 

* 주로 BASH가 많이 쓰인다.

* 대표적인 Shell 어플리케이션은 터미널.

BASH의 2가지 출력 방식

1. printf (PRINT Format)
  ex) $ printf "My name is %s" Yoonho

2. echo
  ex) $ echo "Hello World!" : 문자열이 그대로 화면에 출력된다.

BASH의 환경 변수

$USER : 현재 로그인한 유저의 유저네임
$HOME : home의 경로. ~와 같음
$OLDPWD : 바로 전의 위치. -와 같음

 

Shell 명령어의 문법

$ command options [argument1, [argument2...

 

$ ls -a /etc/netplan

command = ls

option = -a

argument = /etc/netplan

 

* command는 동사, argument는 목적어, option은 부사와 비슷한 것 같다.

 

BASH Metacharacters

Metacharacters란 원래 뜻이 아닌 BASH에서 쓰는 고유의 의미를 갖고 있는 기호들을 말한다.

 

*(asterisk) = 여러 글자 대용의 조커 카드

e*.txt : e로 시작하는 txt파일

 

? = 한 글자 대용의 조커 카드

e?.txt : e로 시작하고 파일명이 총 2글자인 txt파일

 

[ ] = 대괄호 안에 든 것들 중 하나

e[abc].txt : ea.txt || eb.txt || ec.txt

doc[1-3].txt : doc1.txt || doc2.txt || doc3.txt

[a-zA-Z].txt : 모든 영문자 중 한 글자로 된 파일

 

{ } = 중괄호 안에 든 것 모두

touch {mon,tues,wednes}day

: monday tuesday wednesday 생성됨

 

~(tilde) = home의 위치

cd ~ : /home/yoonho 로 이동

 

-(hyphen) = 바로 전에 있던 위치

 

;(semicolon) = 명령어들을 묶어서 한 번에 할 수 있게 함(개수 제한 없음)

pwd ; ls ; date

 

|(pipe) = 명령의 결과가 너무 많을 때 오른쪽으로 보낸다

ls -al | more : 페이지 단위로 표시 후 더보기 제공

 

' ' = 문자열을 문자열 그 자체로 본다

echo '~' : ~가 프린트 됨

echo ~ : /home/yoonho가 프린트 됨

 

" " = $, `, \를 해석함

echo "$PATH" : 문자열이 아닌 패스값이 출력됨

 

` `(backtick) = 쌍따옴표 안에 있는 명령어를 해석한다(Unquoting).

echo "Now is `date`."

 

\ = 뒤에 나오는 Metacharacter를 무력화한다(Escape).

echo \~ : ~가 출력됨

 

&&(Double Ampersand) = 왼쪽이 성공하면 오른쪽을 실행해라

$ mkdir Test && echo "Success"

만드는 데에 성공해서 Success 출력

 

||(Double Pipe) = 왼쪽이 실패하면 오른쪽을 실행해라

$ mkdir Test || echo "Failure"

Test 디렉터리가 이미 존재해 mkdir 실패 -> Failure 출력

 

>, < = 입출력의 흐름을 바꾼다(Redirect)

ls > test.txt : 현재 위치의 목록을 표준출력이 아닌 파일로 보낸다.

cat < test.txt > aaa.txt : test.txt의 내용을 aaa.txt로 복사한다.

 

>> = 추가로 붙인다(Appending)

$ date > date.txt

$ cal >> date.txt

덮어쓰기 되지 않고 둘 다 들어감.

 

 

+ Recent posts