IP의 가용 범위

192.168.10.0/24     - Prefix

/24는 마스킹할 비트 수를 나타내며 Prefix라고 한다.

해서 해당 C Class IP의 가용 범위는 아래와 같다.

192.168.10.0 ~ 192.168.10.255

예약 IP

첫 번째 IP = 192.168.10.0 = 네트워크 이름

마지막 IP = 192.168.10.255 = Broadcast(방송용) 주소

 

사용 가능 IP : 192.168.10.1 ~ 192.168.10.254


'네트워크 이름'에 관하여

IP가 C Class라는 가정 하에 3번째 옥텟까지가 Net-ID(네트워크 이름)이다.

ex) 192.168.10

그런데 IP는 반드시 4개의 옥텟을 채워야 하므로 네 번째 옥텟에 0을 넣어

192.168.10.0

을 네트워크 이름으로 사용하는 것이다.


Subnetting 이란?

상위 업체로부터 할당받은 Classful(클래스를 기준으로 분류)한 네트워크를 필요한 만큼 나누는 방법.

IP 주소들의 낭비를 줄이기 위해 나오게 되었다.

 

사용하는 Bit 수 Subnet Mask Network 갯수 Network 당 IP 갯수
0 0(24) 1 256
1 128(25) 2 128
2 192(26) 4 64
3 224(27) 8 32
4 240(28) 16 16
5 248(29) 32 8
6 252(30) 64 4
7 254(31) 128 2
8 255(32) 256 1

 

네트워크 갯수 = 2^(사용할 bit 수)

Network  갯수 기준 : 왼쪽부터 카운트

Host (IP 갯수) 기준 : 오른쪽부터 카운트

 

Subnet Mask : 건드린 Bit 수에 따라 정해진다.

ex) sss00000 이면 모든 경우의 수 중 최대값인 11100000을 생각해야 하므로 128+64+32=224 이다.

- 256-32(128부터 비트 수에 따라 반감 1:128, 2:64, 3:32...) 로 계산할 수도 있다.

- 255.255.255.0 이었던 Mask 값에서 Subnetting을 거치면 Subnet Mask라고 한다.

 

210.130.70.0 (255.255.255.0) 네트워크를 8개의 서브 네트워크로 Subneting 하기.

1. Host-ID 2진수로 변환하기

210.130.70.00000000

255.255.255.00000000

 

2. Subnet Bit 설정 - 8개로 쪼갤 것이기 때문에 3개의 Bit를 건드려서 8개의 경우의 수를 만든다.

210.130.70.sss00000

255.255.255.nnn00000

 

3. 새로 만들어진 Subnet Bit 경우의 수 나열

210.130.70.sss00000

255.255.255.nnn00000

                000

                001

                010

                011

                100

                101

                110

                111

 

4. 전체 Host-bit 나열

210.130.70.sss00000

255.255.255.nnn00000

                00000000 ~ 00011111 : 0~31 ----> 210.130.70.0, 255.255.255.224 (210.130.70.0 ~ 210.130.70.31)

                00100000 ~ 00111111 : 32~63 --> 210.130.70.32, 255.255.255.224 (210.130.70.32 ~ 210.130.70.63)

                01000000 ~ 01011111 : 64~95

                01100000 ~ 01111111 : 96~127

                10000000 ~ 10011111 : 128~159

                10100000 ~ 10111111 : 160~191

                11000000 ~ 11011111 : 192~223

                11100000 ~ 11111111 : 224~255

 

[ 문제 ]

192.168.100.0, 255.255.255.0 를 50개의 IP 주소를 사용할 수 있는 서브 네트워크로 Subnetting 하기.


변경된 Subnet Mask 값은?

더보기

255.255.255.192

서브 네트워크의 갯수는?

더보기

4개

Subnet 당 사용 가능한 IP 수는?

더보기

62개

Subnet 주소 중에 2번째 Subnet의 '네트워크 이름'은?

더보기

192.168.100.64


VLSM(Variable Length Subnet Mask)

다음 예시를 보자.

 

현재 갖고 있는 네트워크

Class : C

IP : 192.168.120.0

Mask : 255.255.255.0

 

100개의 IP주소를 필요로 하는 A라는 1개의 부서가 있고, 각 25개의 주소를 필요로 하는 B, C, D, E라는 4개의 부서가 있다. 위의 하나 뿐인 네트워크를 어떻게 Subnetting하여 사용해야 할까?

 

A - 100 Host - 1 Subnet

B, C, D, E - 25 Host - 4 Subnet

255
0~127 128~255
128~159 160~191 192~223 224~255
A(126개의 IP 사용 가능) B(30) C(30) D(30) E(30)

 

1. 1개의 비트를 사용해 두 개의 서브 네트워크로 분할한다.

192.168.120.s0000000

255.255.255.n0000000

                00000000 ~ 01111111 : 0~127 ---> 192.168.120.0, 255.255.255.128 (192.168.120.0 ~ 127)

                10000000 ~ 11111111 : 128~255 ---> 192.168.120.0, 255.255.255.128 (192.168.120.128 ~ 255)

 

 

2. 두 번째 서브 네트워크를 25개의 IP를 사용할 수 있는 서브 네트워크로 다시 한 번 쪼갠다.

(1은 고정이므로 빼놓고 7개 비트만 계산한다.)

192.168.120.1 ss00000

255.255.255.1 nn00000

                  1000000 ~ 0011111 : 128~159 ---> 192.168.120.128, 255.255.255.224 (192.168.120.128 ~ 159)

                  0100000 ~ 0111111 : 160~191 ---> 192.168.120.160, 255.255.255.224 (192.168.120.160 ~ 191)

                  1000000 ~ 1011111 : 192~223 ---> 192.168.120.192, 255.255.255.224 (192.168.120.192 ~ 223)

                  1100000 ~ 1111111 : 224~255 ---> 192.168.120.224, 255.255.255.224 (192.168.120.224 ~ 255)

 

 

'IT > Network Theory' 카테고리의 다른 글

MAC & LLC : Data-Link Layer  (0) 2021.08.27
LAN(Local Area Network) / Topology  (0) 2021.08.27
OSI 7 Layer Model & TCP/IP Model  (0) 2021.08.26
Port Number  (0) 2021.08.26
TCP Header / UDP Header / TCP 3 Way Handshake / TCP 4 Way Handshake  (0) 2021.08.26

OSI 7 Layer

 

7 : Application

사용자가 네트워크에 접근할 수 있도록 인터페이스를 제공한다.

(편지지와 펜)


6 : Presentation

인코딩과 디코딩 작업, 코드 변환, 압축 등의 작업을 맡는다.

(편지를 작성한다)


5 : Session

어플리케이션 간의 논리적 연결인 세션의 생성, 관리, 종료를 담당한다.

(우체국에 간다)


4 : Transport

Port Number(우체국 창구)에 따라서 프로토콜 결정

 

TCP : 상대방을 확인하기 때문에 신뢰성이 높지만 오래 걸린다.

ex) HTTP(80)

1. 데이터를 순차적으로 하나씩 확인

2. 실패하면 자동으로 재전송해서 모두 처리한다.

 

UDP : 상대방을 확인하지 않기 때문에 손실 가능성이 있다.

ex) DNS(53)

1. 소량의 데이터 처리에 적합

2. 빨리 처리를 완료해야 한다.

3. 실시간 스트리밍 등에 사용


3 : Network

Source IP(보내는 사람 주소), Destination IP(받는 사람 주소)를 확인하고

Ethernet(트럭), WAN(비행기) 등 다양한 방법 중 하나를 결정.

또한 라우팅을 통해 목적지까지 최적의 경로를 설정한다.

 

네트워크 계층은 최종 목적지까지 패킷의 전달을 책임진다.


2 : Data Link

데이터를 전송 형식에 맞게 변환시킨다.

(트럭 또는 비행기에 실을 수 있도록)


1 : Physical

디지털 데이터를 전기적 신호로 바꾼다.

(편지를 운송수단에 싣는다)

 


TCP/IP Model (Suite)

 

5 : Application

통신할 데이터를 가공한다.

 

DNS, FTP, SMTP, DHCP, HTTP


4 : Transport

포트 넘버를 파악하고 그에 따른 전송 프로토콜을 결정한다.

 

TCP, UDP


3 : Internet

IP 주소를 확인하고 목적지까지의 경로를 설정한다.

 

IP


1, 2 : Network Interface

디지털 데이터를 전기적 신호로 변환한다.

 

'IT > Network Theory' 카테고리의 다른 글

LAN(Local Area Network) / Topology  (0) 2021.08.27
IP / Mask / Subnet Mask  (0) 2021.08.27
Port Number  (0) 2021.08.26
TCP Header / UDP Header / TCP 3 Way Handshake / TCP 4 Way Handshake  (0) 2021.08.26
Encapsulation & Decapsulation  (0) 2021.08.26

Port Number란 IP Address를 통해 서버에 도착했을 때

그 서버의 어떤 프로세스를 찾아갈지를 결정하는 값이다.

 

Port Number는 16bits로 되어 있으므로 총 65,536개(2^16)의 포트 번호가 존재할 수 있다.

 

인터넷 할당 번호 관리 기관 IANA(Internet Assigned Number Authority)

포트 번호를 3개의 범위로 나누어서 관리하고 있다.

 

Well Known Port

1 ~ 1,023

 

특정 서비스용으로 IANA에서 할당한 TCP/UDP 포트


Registered Port

1.024 ~ 49,151

 

기관이나 기업들을 위해 IANA에서 관리하는 포트


Dynamic Port

49,152 ~ 65,535

 

임시 포트로 일반 사용자들이 자유롭게 사용할 수 있는 포트

 

TCP Header

Source Port(16bits) : 발신지 포트 주소

Destination Port(16) : 목적지 포트 주소

Sequence Number(32) : 한 번 패킷을 전송할 때마다 1씩 증가시킨다.

Reserved(6) : 예약되어 있기 때문에 사용하지 않음.

Window(16) : 상대방이 받을 수 있는 패킷의 수.

Checksum : 오류가 있는지 확인한다.

 

 


Source Port(16bits) : 발신지 포트 주소

Destination Port(16) : 목적지 포트 주소

Checksum : 오류가 있는지 확인한다.


TCP 3 Way Handshake

Client와 Server가 서로 통신을 시작할 때의 절차이다.

 

 

 

1. client가 server에게 통신이 가능한 지 묻는 SYN을 보낸다

(client의 Segment Size, Window Size 알려줌).

 

2. server가 client에게 확인했다는 의미의 ACK와 통신이 가능한 지 묻는 SYN을 보낸다

(server의 Segment Size, Window Size 알려줌).

 

3. client가 server에게 확인했다는 의미로 ACK를 보낸다.

 

4. 연결

 

client와 server 각자의 Segment Size와 Window Size 중 작은 값에 맞추어 통신한다.

 

ex)

client_seg=15Byte

client_win=32KByte

server_seg=128Byte

server_win=64KByte

 

실제 통신

seg=128Byte

win=32KByte

 


4 Way Handshake

Client와 Server가 서로 통신을 끊을 때의 절차이다.

 

 

 

1. client에서 server로 연결을 끊어도 되는지 묻는 FIN 전송.

 

2. server에서 확인했다는 뜻의 ACK를 전송하고, 남은 작업이 있다면 마저 처리를 함.

작업하는 동안 client는 기다리고 작업이 끝나면 server 측에서 FIN을 보낸다.

 

3. client에서 server의 FIN을 확인하고 ACK를 전송.

 

4. 연결 해제

 

'IT > Network Theory' 카테고리의 다른 글

LAN(Local Area Network) / Topology  (0) 2021.08.27
IP / Mask / Subnet Mask  (0) 2021.08.27
OSI 7 Layer Model & TCP/IP Model  (0) 2021.08.26
Port Number  (0) 2021.08.26
Encapsulation & Decapsulation  (0) 2021.08.26

Encapsulation(택배 포장)

 

Layer 4 PDU (Segment) : TCP 헤더 붙이기(제품명 적기)

Layer 4 Header(Port Number) + Original Data

계층별 장비 - L4 Switch - 4계층 헤더만 처리할 수 있음


Layer 3 PDU (Datagram = Packet) : IP 헤더 붙이기(이름 적기)

Layer 3 Header(Source IP, Destination IP) + Segment

계층별 장비 - Router - 3계층 헤더만 처리할 수 있음

 

MTU(Maximum Transmission Unit) : 한 패킷이 전송할 수 있는 최대 용량. 이더넷에서는 1,500bytes.

MSS(Maximum Segment Size) : TCP Header와 IP Header의 기본 사이즈가 20bytes이므로 MSS는 1460bytes이다.


Layer 2 PDU (Frame) : Ethernet 헤더 붙이기(집 주소 적기)

Layer 2 Header(MAC Address) + Datagram + Layer 2 Footer

계층별 장비 - Switch - 2계층 헤더만 처리할 수 있음


데이터를 신호로 변환해서 전송

계층별 장비 - Hub - 전기적인 신호만 처리할 수 있음

 

 

Decapsulation(택배 포장 뜯기)

 

받은 신호를 데이터로 변환

계층별 장비 - Hub - 전기적인 신호만 처리할 수 있음


Layer 2 PDU (Frame) : Ethernet 헤더 제거

Frame - (Layer 2 Header + Layer 2 Footer) = Datagram

계층별 장비 - Switch - 2계층 헤더만 처리할 수 있음


Layer 3 PDU (Datagram) : IP 헤더 제거

Destination IP가 맞는지 확인

Datagram - IP Header = Segment

계층별 장비 - Router - 3계층 헤더만 처리할 수 있음


Layer 4 PDU (Segment) : TCP 헤더 제거

TCP 헤더 확인, 포트 넘버 확인

Segment - TCP Header = Original Data

계층별 장비 - L4 Switch - 4계층 헤더만 처리할 수 있음

 

 

 

'IT > Network Theory' 카테고리의 다른 글

LAN(Local Area Network) / Topology  (0) 2021.08.27
IP / Mask / Subnet Mask  (0) 2021.08.27
OSI 7 Layer Model & TCP/IP Model  (0) 2021.08.26
Port Number  (0) 2021.08.26
TCP Header / UDP Header / TCP 3 Way Handshake / TCP 4 Way Handshake  (0) 2021.08.26

파일의 종류

- : 일반 파일

d : 디렉토리 파일

b(block device) : 플로피 디스크, 하드 디스크 등의 장치 파일

c(character device) : 마우스, 프린터 등 입출력 장치 파일

l(link) : 바로가기 파일


몇 가지 파일 명령어

mkdir

디렉토리 생성 명령어

-p(parent) 옵션 : 생성하려는 경로의 상위 디렉토리가 없으면 한꺼번에 전부 만든다.


cd [argument]

절대경로 : 어디서나 접근할 수 있다 : cd /

상대경로 : 현재 위치 기준으로 접근한다 : cd ../../../..

상황에 알맞게 사용해야 한다.


rmdir [option] [argument]

반드시 해당 디렉토리가 비어 있어야만 지울 수 있다.

-p 옵션 : rmdir aaa/bbb/ccc 다 지운다.


rm [option] [argument]

이 명령어로 파일 및 디렉토리를 삭제하는 경우가 더 많다.

삭제를 진행할 경우 복구하기 어렵다.

-i(interactive) 옵션 : 삭제 전 한 번 더 확인한다.

-f(force) 옵션 : 강제로 삭제한다.

-r 옵션(recursive) : 디렉토리 내의 파일까지 모두 삭제하기 위해서 사용하는 중요한 옵션

(디렉토리 내부를 순회하면서 하나씩 삭제하는 원리)


cp [option] [argument1] [argument2]

원본과 복사할 파일(타겟)을 모두 지정해주어야 한다.

-r 옵션(recursive) : 디렉토리 내의 파일까지 모두 복사하기 위해서 사용하는 중요한 옵션

(디렉토리 내부를 순회하면서 하나씩 복사하는 원리)


mv [option] [argument1] [argument2]

이동과 이름변경 두 가지 기능이 있기에 사용하기 전에 잘 생각해야 한다.

mv date.txt now.txt : 두 아규먼트의 레벨이 같으므로(둘 다 파일) 이름 변경이 이루어진다.

mv Temp Temp1 : 디렉토리의 이름 변경.

mv now.txt Temp1 : argument1은 파일, argument2는 디렉토리이므로 이동.


chmod [option] [argument]

보안의 기초로,

r(read), w(write)(삭제 권한 포함), x(execute) 3가지의 속성으로 권한을 제한한다.

그룹별로 지정하기에 용이함.

 

파일 상세정보에서

-rwxrwxrwx

이런 식의 포맷을 확인할 수 있으며 앞의 문자 하나는 파일의 종류를 나타내고, 이후로 3글자씩 끊어서 읽는다.

첫 번째는 파일의 소유주, 두 번째는 소유주 그룹, 세 번째는 일반인이다.

 

2진수를 10진수로 치환해서

rw- r-- r-x

110 100 101

6    4    5

이렇게 표기할 수도 있다.

chmod 744 sample.txt : 소유주는 rwx 모두, 소유주 그룹은 r--, 나머지는 r-- 이다.

 

u(user), g(group), o(other), a(all) 4가지 속성으로 r, w, x 권한을 빼거나 추가할 수 있다.

chmod o+x sample.txt : 일반 사용자에게 실행 권한을 추가한다.


ln [option] [argument1] [argument2]

링크의 종류에는 hard link와 symbolic link가 있다.

 

hard link는 i-node(주민번호)까지 똑같이 복제한 파일이다.

또한 원본이 수정되면 같이 수정된다.

원본이 삭제되어도 그대로 사용 가능하다.

ln data.txt clone.txt

 

symbolic link는 원본 파일로 연결되는 바로가기 파일이다.

파일명만 같으면 기존 파일이 삭제되고 다른 파일이 생겨도 그 곳을 가리킨다.

원본이 삭제되면 사용할 수 없게 된다.

ln data.txt -s twin.txt


wc [option] [argument]

Word Counter.

 

-l 옵션 : 라인 수

-w 옵션 : 단어 수

-c 옵션 : 바이트 수

-m 옵션 : 문자 수


sort [option] [argument]

파일의 내용을 소팅해서 보여준다.


cmp [option] [argument1] [argument2]

두 파일의 차이점을 보여준다.

업그레이드 버전이 diff 명령어.

 


vsftpd(Very Secure FTPD) 서버와 FileZilla 클라이언트 설치

포트 포워딩 룰 추가.

이름바꿔 복제.

$ sudo nano /etc/netplan/00-installer-config.yaml

114로 수정한다.

try, apply 절대 하지 말고 IP 변경하면 바로 리부트.

PuTTY에서 설정 후 세이브.

접속이 잘 되고 IP가 바뀌었다.

윈도우즈 커맨드에서 Host-Only IP로 핑 날리기.

FTP 서버 설치 준비가 끝났다.

$ sudo apt update

$ sudo apt install -y vsftpd

다음 설정 파일을 나노 에디터로 열어 수정해 줄 것이다.

25라인: anonymous_enable=NO -> YES

31라인: #write_enable=YES -> 주석 제거

40라인: #anon_upload_enable=YES -> 주석 제거

44라인: #anon_mkdir_write_enable=YES -> 주석 제거

$ sudo systemctl restart vsftpd

$ sudo systemctl enable vsftpd

$ sudo systemctl status vsftpd

$ cd /srv/ftp

$ sudo mkdir pub

$ sudo chmod go+w pub

 

익명으로 접속되는 디렉터리는 /srv/ftp 이다.

pub 디렉토리를 생성하고 모든 사용자의 모든 권한을 허용했다.

$ touch today.txt

write 권한이 others에게도 생겼기 때문에 sudo 없이도 가능하다.

FTP 서버의 전용 회선인 21번 포트를 연다(하지만 이후 연결이 되지 않아 아예 방화벽을 비활성화했다).

FileZilla Client를 설치한다.

맨 왼쪽의 것을 다운로드한다.

설치 후 셋업 파일을 실행하고 Next로 쭉 진행한다.

Desktop Icon은 유용하기에 추가로 체크해줬다.

호스트 IP와 사용자명을 입력, 비밀번호는 아무거나 입력하고 빠른 연결을 클릭한다.

포트 넘버는 생략해도 디폴트가 21이기에 넣지 않아도 상관없다.

아까 잠깐 언급했듯이 연결이 잘 되지 않아 방화벽 자체를 disable 시켜버리니 연결이 되었다.

파일을 업로드 할 때는 왼쪽에서 오른쪽으로 드래그해서 올리면 된다.

 

FTP 환경 구축 완료.


MySQL 환경 구축

포트 포워딩 룰 추가 및 가상머신 복제.

IP 수정 후 try, apply 하지 말고 $ sudo init 6

PuTTY 설정

변경된 IP 확인 및 HostOS에서 핑 날려보기.

설치 준비 완료.

$ sudo apt update

$ sudo apt install -y mysql-server

$ sudo mysql_secure_installation

 

비밀번호 확인 플러그인 허용 : y

비밀번호 안전도 : 0

[8자리 패스워드 입력]

[패스워드 재입력]

루트 비밀번호 변경 : n

익명 사용자 삭제 : n

원격 연결 제한 : n

테스트 DB 삭제 : n

권한 테이블 새로고침 : y

$ sudo mysql -u root -p

[비밀번호 입력]

SELECT VERSION();으로 버전 확인 후 exit.

$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

bind-address = 127.0.0.1로 된 것을 주석친다.

(로컬호스트에서만 접속 가능하게 하는 옵션이기 때문에 원격지에서 접속하기 위해서)

CREATE USER 'root'@'%' IDENTIFIED BY 'P@$$W0rd';

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

 

root 계정을 새로 만들어야 원격지 접속이 가능하다고 해서 새로 만들고 권한을 준다.

$ sudo systemctl restart mysql

$ sudo ufw allow 3306/tcp

이제부터 DB 서버에 연결할 클라이언트를 준비할 것이다.

HeidiSQL 사이트에 접속해서 클라이언트 툴은 다운로드한다.

동의 사항 동의해주고 기타 등등 Next.

설치 후 restart는 하지 않았다.

좌측 하단 '신규' 클릭 후 오른쪽 화면처럼 설정을 한다.

암호는 PuTTY에서 설정했던 'P@$$W0rd' 로 하면 된다.

HeidiSQL로 MySQL Database 접속에 성공한 모습.


Virtualization(가상화)

물리적인 하드웨어 장치를 논리적인 소프트웨어 장치로 추상화하는 것.

 

가상화 방법

1. Host 가상화

2. HyperVisor 가상화 : VirtualBox, VMWare, VirtualPC

3. Container 가상화

 


오늘을 끝으로 우분투 리눅스 기초를 공부했고

내일부터 네트워크와 보안 솔루션에 대해 공부한다.

물론 리눅스는 계속 사용하며 공부한다.


SSH 연결 안 될 때 확인 사항

1. $ sudo ufw status

2. $ sudo systemctl status ssh

3. Hyper V 실행 여부


Ubuntu Server에 Host-Only 이더넷 설정

Ubuntu Desktop에 Host-Only 설정할 때와 같이

두 번째 이더넷 어댑터를 켜주고 호스트 전용 어댑터로 설정한다.

 

$ cd /etc/netplan 으로 들어와서

$ sudo cp 00-installer-config.yaml 00-installer-config.yaml.bak

으로 백업본 만들기(기존 백업본이 있다면 제거 후).

$ sudo nano 00-installer-config.yaml

nano 에디터를 통해 이더넷 설정 내용 추가

(Host-Only라서 DNS는 필요치 않음.)

cat으로 확인 후

$ sudo netplan try

$ 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가 설정되었음을 확인 가능하다.

Windows 커맨드에서 핑을 쏘아보았다.


&&, || 함께 쓰기

시험 삼아 해 봤는데 if~else문처럼

명령어 && echo "Success" || echo "Failed"

이런 식의 사용이 가능하다.


$PS1

현재 프롬프트 표시

 

\u@\h:\w\$

username@hostname:working directory$

yoonho\@ubuntu-server:~$

 

원하는 대로 프롬프트를 설정할 수 있다.

PS1='\d \t > '

이런 식으로 하면 이후엔 프롬프트가

Tue Aug 24 11:24:12 >

이렇게 나온다.

 

Secondary Prompt

\(역슬래시)를 긋고 이어서 명령어를 입력할 때 나오는 프롬프트이다.

 

PS2='\h, \t > '

이렇게 하면

ubuntu-server, 11:26:39 >

이런 식으로 프롬프트가 나오게 된다.

 

* 앞에 export를 붙이면 .profile 파일에 저장이 된다.

환경설정 파일에 저장하지 않으면 로그아웃 시 초기화 된다.

 

.profile = 현재 사용자 전용 프로필

/etc/profile = 모든 사용자에게 적용

 


Apache Web Server 구축

기존의 우분투 서버를 이름만 바꿔 복제한다.

PuTTY에서 임시적으로 127.0.0.1:50107 로 타고 들어와서 두 이더넷 어댑터의 IP의 4번째 옥텟들을 변경한다.

변경 후에 try, apply 등 하지 않고 reboot한다.

VirtualBox 관리자 환경설정에서 포트 포워딩 설정에 들어온다.

apache-web-server에 대한 포트 포워딩 룰을 만든다.

108에 맞추어 PuTTY에서 Apache Web Server 프리셋을 하나 더 만들고 접속한다.

ip를 확인해보면 아까 reboot할 때 자동으로 적용이 되어 108이 된 모습이다.

윈도우즈의 커맨드에선 10.0.2.108로 핑을 때릴 수가 없기 때문에

Host-Only 네트워크인 192.168.56.108로 핑을 때려본다.

화면에 안 나왔지만 $ sudo apt update 먼저 하고 $ sudo apt install apache2 를 한다.

웹 서버 접속을 위해 80번 포트를 열어준다.

방화벽까지 열어주고 나면 웹 브라우저에서 IP 입력 시 기본 html 페이지로 접속이 된다.

여기서 프로토콜인 http:// 와 포트번호인 :80은 생략이 되어서 IP만 입력한다.

 

이 페이지는 apache에서 제공하는 기본 페이지이고,

이 화면은 /var/www/html 경로의 index.html 파일이므로 수정도 가능하다.

$ cd /etc/apache2

$ sudo nano -c apache2.conf

화면엔 -c 옵션이 안 나와있는데 이걸 해야 라인 수를 파악하기 편하기 때문에 해야 한다.

170라인의 <Directory /var/www/> 를 주석치고

그 밑에 <Directory /WebHome> 을 작성한다.

원래 /var/www/ 였던 html 디렉토리의 경로를 /WebHome으로 바꾸는 작업이다.

(현업에선 이렇게 한다고 한다.)

저장과 나가기를 한 후에

$ cd sites-available

$ sudo nano -c 000-default.conf

9번째 라인의 주석을 풀고 서버네임을 www.naver.com으로 바꾼다.

서버 어드민도 naver.com으로 바꾸고

DocumentRoot /var/www/html을 주석치고 DocumentRoot /WebHome으로 바꿔 경로를 읽도록 한다.

$ sudo systemctl restart apache2

$ sudo systemctl enable apache2

$ sudo systemctl status apache2

이제 아까 경로에 박아놨던 WebHome 디렉토리를 실제로 만든다.

디렉토리를 만들고 원래 위치에 있던 html파일을 복사해 넣는다.

 

Apache Web Server 설정 끝.


Local DNS

C:\Windows\System32\drivers\etc 경로의 hosts 파일을 연다.

이 파일이 도메인 네임 입력 시 최우선으로 확인하는 곳인데

이 곳에서 해당 도메인에 대한 IP를 발견하지 못하면 한국 DNS로 넘어가서 IP를 받아오는 것이고

이 파일에서 192.168.56.108 www.naver.com

이런 식으로 설정을 해주면 웹 브라우저에서 www.naver.com 입력 시 내 서버로 접속이 된다.

 

주의할 점은 .txt 파일이 되어버리면 안되며, 윈도우즈에서 기본적으로 수정을 할 수 없도록 락을 걸어놨기 때문에

파일을 수정해서 외부에 다른 이름으로 저장을 하고, 그 파일의 확장자명을 강제적으로 없앤 뒤

원래의 C:\Windows\System32\drivers\etc 경로에 덮어써버리면 된다.


Nginx Web Server 구축

설정 과정은 Apache Web Server랑 거의 같다고 보면 되기 때문에

대충 생략하며 일부 과정만 스크린샷으로 남길 것이다.

 

Apache와 Nginx의 가장 큰 차이점은

Apache는 서버에 리퀘스트가 들어오기만을 기다리면서 다른 일을 하지 못하지만

Nginx는 다른 작업을 수행하면서 서버에 리퀘스트가 감지되면 그때그때 리퀘스트도 처리한다는 점이다.

 

Apache는 편의점 문이 조용히 열리는 문이어서 알바생이 24시간 내내 손님이 오나 문만 보고 있어야 하는 것이고

Nginx는 편의점 문에 종이 달려 있어서 청소 등 다른 일을 하다가도 손님이 오면 그에 맞춰 응대를 할 수 있는 것이다.

PuTTY로 접속해서 IP 변경.

마찬가지로 try, apply 등 하지 않고 reboot.

포트 포워딩 룰 추가.

윈도우즈에서 112번으로 핑 날려보기.

PuTTY로 로그인한다.

업데이트 후 Nginx 설치를 진행한다.

$ sudo systemctl restart nginx

$ sudo systemctl enable nginx

$ sudo systemctl status nginx

 

enable 시에 서비스이름.service 파일이 생성된다.

Web Server 전용의 80번 포트 열기.

192.168.56.112에 성공적으로 접속됨.

nginx의 index 페이지 파일 또한 /var/www/html에 있으니 임의로 수정할 수 있다.

$ sudo nano /etc/nginx/sites-available/default

파일에 들어가서 설정을 해주어야 한다.

위는 IPv4, 아래는 IPv6인데 둘 다 포트 넘버를 80 -> 8080으로 변경한다.

Apache Web Server가 이미 80번 포트를 쓰고 있어서 겹치면 안 되기 때문.

아래 쪽으로 내려서 root /var/www/html; 를 주석치고

root /WebHome; 을 넣는다.

 

서버네임도 www.kakao.com; 으로 바꾼다.

설정한 8080포트를 방화벽에서 열어준다.

아까의 hosts 파일에서 또 한 번 Local DNS를 사용해본다.

www.kakao.com:8080 으로 접속이 되는 모습.

 

 


요약

1. 가상머신을 복제한다.

2. IP를 변경한다(reboot).

3. 포트 포워딩 룰을 추가한다.

4. PuTTY에서 프리셋을 만든다.

5. 아파치 혹은 엔진엑스를 설치한다.

6. 포트 방화벽을 열어준다(80 or 8080).

7. /var/www/html 경로의 index.html 파일을 수정해본다(필수 아님).

8. /etc 쪽 경로에서 각종 파일을 설정한다.

9. restart, enable, status 삼총사를 실행한다.

10. WebHome 디렉토리 생성 후 index.html을 복사해 넣는다.


XRDP 서버 열기

$ sudo apt -y install xrdp

XRDP 서버 패키지를 설치한다.

$ sudo ufw allow 3389/tcp

XRDP서버의 전용 포트인 3389/tcp 포트를 열어준다.

윈도우즈에 기본적으로 탑재된 원격 데스크톱 연결 프로그램을 열고 '옵션' 클릭.

리눅스 서버의 Host-Only IP와 사용자 이름을 입력한다.

이게 XRDP의 클라이언트 프로그램이다.

처음엔 접속을 하려고 하면 블랙 스크린이 뜰 것이다.

약간의 설정 파일 수정이 필요하다.

$ sudo nano -c /etc/xrdp/startwm.sh

-c 옵션은 에디터 내 라인 수 표시이다.

위와 같이 33번줄부터 정확히 입력하고 덮어쓰기-종료 를 한다.

cat으로 확인하고 stop & start 반복

다시 접속해보면 성공적으로 XRDP 서버에 연결된다.


Shutdown 관련 명령

$ sudo poweroff : 서버 전원을 물리적으로 끄는 것과 같다

$ sudo shutdown -r now : 즉시 리부트 실행

$ sudo shutdown -P +10 : 10분 후 종료

$ sudo shutdown -r 22:00 : 오후 10시에 재부팅

$ sudo shutdown -c : 예약된 shutdown 취소

$ sudo init 0 : 시스템 종료

$ sudo init 6 : 시스템 재부팅

 

init의 런레벨

0 : Power Off - 종료 모드

1 : Rescue - 시스템 복구 모드

2 : Multi-User - 사용하지 않음

3 : Multi-User - 텍스트 모드의 다중 사용자 모드

4 : Multi-User : 사용하지 않음

5 : Graphical - 그래픽 모드의 다중 사용자 모드

6 : Reboot

 

default.target으로 현재 런레벨을 확인할 수 있다.


WSL2(Windows Subsystem for Linux) 설치

Windows 검색 -> PowerShell -> 관리자 권한으로 실행

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

복사해서 넣기

winver 명령어로 빌드가 18362 이상인지 확인하고 진행한다.

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

입력 후 엔터.

https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

위 파일을 다운로드하고 설치 및 실행한다. 오류가 뜨면 재부팅하고 다시하면 된다.

wsl --set-default-version 2

입력 후 엔터.

https://aka.ms/wslstore

Microsoft Store 앱을 열고 Linux 검색 후 Ubuntu 20.04 LTS를 다운로드한다.

유저네임, 비밀번호, 비밀번호 확인을 입력해준다.

wsl --set-default Ubuntu-20.04

wsl -l -v

를 쳐서 디폴트 설정을 해주고 왼쪽에 애스터리스크가 정상적으로 표시되는지 확인한다.

 

이후 설치한 Ubuntu 20.04 LTS 어플리케이션을 열거나 PowerShell에서 wsl 명령어 입력,

또는 SSH를 통해 접속하는 방법이 있다(SSH 접속은 추후에 할 것 같다.).

 

 

 

 


Shell 환경변수

export YOIL=monday

echo $YOIL

unset $YOIL

echo $YOIL

 

모든 쉘 스크립트 파일은 알아볼 수 있도록 확장자명을 .sh로 하고

주석으로 #!/bin/bash를 시작할 때 넣는다.

nano 에디터를 사용해 이런 식의 쉘 스크립트를 코딩할 수 있다.

실행 결과.


Linux Commands

$PATH : 모든 명령어들의 경로의 집합

which : 해당 명령어의 경로를 출력

find : 파일의 위치를 알려준다.

-exec rm { } \; 을 뒤에 추가해서 찾은 파일들에 대한 추가 명령을 할 수 있다.

whereis : 해당 명령어의 경로와 소스 등 상세 정보까지 출력

locate : DB에서 찾기 때문에 가장 상세하지만 updatedb 명령을 해야 한다.

--help 속성 : 해당 명령어의 사용법을 알려준다.

man : 해당 명령어의 매뉴얼을 보여준다.

whoami : 현재 로그인한 사용자명 출력

cat /etc/os-release : OS에 대한 자세한 정보 출력

file : 해당 파일의 타입과 기타 정보 출력

 

rwxrwxrwx

ls -l 명령 시 대상이 파일이면 앞에 -을 붙이고 출력되는 옵션.

Read, Write, eXecute 를 뜻하고, 앞에서부터 3개씩 끊어서

파일 제작자, 제작자가 속한 그룹, 그 외 사용자의 권한을 정의한다.

 

만약 대상이 디렉토리라면 앞에 d를 붙이고 나온다.

 


내가 이미 알고 있거나 간단해서 굳이 정리할 필요 없는 부분은 생략하며 정리하고 있다.

+ Recent posts