DNS 서버 구축 및 MariaDB

soobeen-jeong·2022년 11월 17일
0

텔넷과 SSH

네트워크에서 데이터를 주는 컴퓨터를 '서버(Server)'
데이터를 요청하고 받는 컴퓨터를 '클라이언트(Client)'

컴퓨터가 데이터를 주고받는 목적은 특정한 기능, 즉 서비스*를 제공하고 사용하기 위한 것입니다.
네트워크로 연결된 컴퓨터 중 서비스를 제공하는 쪽을 서버라 부르고
그 서비스를 요청하고 받는 쪽을 클라이언트라고 부른다.

서버 클라이언트 구조는 전 세계의 네트워크가 연결된 인터넷의 기반이 되었고, 이를 활용한 대표적인 서비스가 웹 서비스

telnet 사용

putty telnet 사용


ssh 사용

ssh 설치

sudo apt install ssh


putty ssh 사용



파일 송수신

ftp 서버 설치

sudo apt install vsftpd

FTP 설정 파일: /etc/vsftpd.conf 파일

vsftpd.conf 옵션

  • anonymous_enable: anonymous(익명) 사용자의 접속을 허가할지 설정
  • local_enable: 로컬 사용자의 접속 허가 여부를 설정
  • write_enable: 로컬 사용자가 저장, 삭제, 디렉터리 생성 등의 명령을 실행하게 할 것인지 설정
    (anonymous 사용자는 해당 없음)
  • anon_upload_enable: anonymous 사용자의 파일 업로드 허가 여부를 설정
  • anon_mkdir_write_eanble: anonymous 사용자의 디렉터리 생성 허가 여부를 설정
  • dirlist_enable: 접속한 디렉터리의 파일 리스트를 보여줄지 설정
  • download_enable: 다운로드의 허가 여부를 설정
  • listen_port: FTP 서비스의 포트 번호를 설정(기본: 21번)
  • deny_file: 업로드를 금지할 파일을 지정(예: deny_file={.mpg,.mpeg,*.avi})
  • hide_file: 보여주지 않을 파일을 지정(예: hide_file={.gif,.jpg,*.png})
  • max_clients: FTP 서버의 동시 최대 접속자 수를 지정
  • max_per_ip: 1개 PC가 동시에 접속할 수 있는 접속자 수를 지정

FTP 서버 설정하고 동작시키기: /etc/vsftpd.conf 파일
systemd 데몬으로 관리

sudo systemctl stop vsftpd
sudo systemctl start vsftpd
telnet 0 21

윈도우에서 FTP 서버 연결(FileZila)

22번 포트로 연결하여 보안 접속한 경우

DHCP 서버

DHCP (Dynamic Host Configuration Protocol)

자신의 NW 안의 클라이언트 컴퓨터가 부팅될 때 자동으로 IP주소, 서브넷 마스크, 게이트웨이 주소, DNS 서버 주소를 할당
장점: 관리 및 이용 편리, 한정된 IP주소로 더 많은 IP주소가 있는 것처럼 활용 가능

네임 서버

네임 서버 = DNS(Domain Name System) 서버
도메인 이름을 IP 주소로 변환시켜 주는 역할
= 이름 해석(Name Resolution)
예) www.nate.com → 120.50.131.112

①가장 초기의 네트워크 접속 방법
컴퓨터가 몇 대 안 됨
사용자가 모두 외워서 직접 IP주소로 접근함

② hosts 파일을 이용하여 네트워크 접속
인터넷에 연결된 컴퓨터가 수십 ~ 수백대로 늘어남
‘hosts’ 파일에 URL과 IP주소를 기록해 놓는 방식 사용
예) 102.54.94.97 rhino.acme.com
38.25.63.10 x.acme.com
127.0.0.1 localhost
::1 localhost
Windows
C:\Windows\system32\drivers\etc\hosts
리눅스
/etc/hosts

③ 네임 서버를 이용하여 네트워크 접속
기하급수적으로 늘어나는 네트워크 상의 컴퓨터에 대한 모든 IP 정보를 파일 하나에 기록하는 것은 무리
이름 해석(Name Resolution)을 전문적으로 해 주는 서버 컴퓨터가 필요 해짐 (=DNS 서버 = 네임 서버)
전화 안내 서비스인 114와 같은 역할
네임 서버는 인터넷에서 변화하는 모든 컴퓨터의 URL과 IP 정보를 거의 실시간으로 제공하므로, 사용자는 더 이상 URL에 해당하는 IP주소를 신경 쓸 필요가 없어짐.
URL만 알고 있으면 어디서든지 해당하는 컴퓨터에 접속

캐싱 전용 네임 서버
PC에서 URL로 IP주소를 얻고자 할 때, 해당하는 URL의 IP주소를 알려주는 네임 서버를 말함

마스터 네임 서버
도메인에 속해 있는 컴퓨터들의 이름을 관리하고, 외부에 해당 컴퓨터의 IP주소를 알려주는 역할

라운드 로빈(Round Robin) 방식의 네임 서버
여러 대의 웹 서버를 운영해서, 웹 클라이언트가 서비스를 요청할 경우에 교대로 서비스를 실시하도록 하는 방식

DNS 구현

DNS 실습용 네트워크 구성

실습용 도메인과 대응 IP
도메인 대응되는 값
bind9.kr 1.1.1.1
dns.bind9.kr 2.2.2.2
kt.bind9.kr 3.3.3.3
ns.bind9.kr 4.4.4.4
www.bind9.kr dns.bind9.kr

BIND9 설치

 sudo apt-get install bind9

서버를 네임서버로 인식시키기
/etc/resolv.conf 에 nameserver 값에 127.0.0.53 추가하여 네임서버가 자기 자신이 되도록 인식


sudo vi named.conf.default-zones 파일에 zone 도메인 정보 추가

sudo cp db.local db.bind9.zone 기존 파일의 틀 이용하기위해 복사

sudo db.bind9.zone

www.soobeen.com 도메인 생성

bind9 DNS 서버 설정

sudo vi /etc/bind/named.conf.options


방화벽 설정

  • TCP 및 UDP 53 포트 개방
  • ufw allow 53/tcp
  • ufw allow 53/udp
    • ufw 활성화 -> 비활성화 되어 있다면 활성화 시킬 때
  • sudo ufw enable
    • ufw 상태 정보 조회
  • sudo ufw status

DNS Server 로컬 테스트

nameserver DNS server IP   ex.192.168.160.130

네트워크 설정 재시작

sudo systemctl restart NetworkManager
또는
sudo nmcli networking off
sudo nmcli networking on

nslookup 으로 확인

[server side]

  • 우선 DHCP 실습을 통해 서버 side에 고정 IP를 갖춘걸 전제
  • bind9 설치 : sudo apt-get install bind9
  • /etc/resolv.conf의 nameserver 값에 고정IP 추가
  • /etc/hostname에 ns.bind9.kr 등록
  • cd /etc/bind -> vi named.conf.default-zones 파일에 bind9.kr 관련 도메인 정보 추가
  • vi /etc/bind/named.conf.options에 특정 설정 적용 후 bind9 재시작
  • cp db.local db.bind9.zone -> vi db.bind9.zone로 *.bind9.kr의 기타 DNS 설정
  • 방화벽 설정 -> TCP/UPD 53 포트 개방 : ufw allow 53/tcp, ufw allow 53/udp
  • ufw 활성화 : sudo ufw enable
  • ufw 상태정보 조회 : sudo ufw status
  • sudo apt-get install resolvconf -> sudo vi /etc/resolvconf/resolv.conf.d/head로 서버IP 추가 및 확인
  • nslookup [도메인명] 으로 확인

[client side]

  • sudo apt-get install resolvconf
  • sudo vi /etc/resolvconf/resolv.conf.d/head 에서 서버IP 추가
  • 방화벽 설정 -> TCP/UPD 53 포트 개방 : ufw allow 53/tcp, ufw allow 53/udp
  • ufw 활성화 : sudo ufw enable
  • reboot
  • cat /etc/resolv.conf에서 서버 등록 확인
  • nslookup [도메인명] 으로 확인 ex) nslookup www.naver.com 등

SQL 기초

MySQL 샘플 데이터 설치

‘testdb’ 데이터베이스를 생성하는 간략한 예제

mysql> show databases;
mysql> create database testdb;
mysql> use testdb;
mysql> CREATE TABLE test
(id smallint unsigned not null auto_increment, 
name varchar(20) not null);
mysql> show tables;
mysql> INSERT INTO tablename(id, name) VALUES (1, 'Sample data' );
mysql> SELECT * FROM test;

SQL

용도 - 데이터베이스에서 데이터를 추출하여 문제 해결
입출력 - 입력은 테이블, 출력도 테이블
번역 - DBMS
사용 예 -
SELECT *
FROM Book;

SQL 기능에 따른 분류

  • 데이터 정의어(DDL)
    테이블이나 관계의 구조를 생성하는 데 사용하며 CREATE, ALTER, DROP 문 등이 있음
  • 데이터 조작어(DML)
    테이블에 데이터를 검색, 삽입, 수정, 삭제하는 데 사용하며 SELECT, INSERT, DELETE,
    UPDATE 문 등이 있음. 여기서 SELECT 문은 특별히 질의어(query)라고 함
  • 데이터 제어어(DCL)
    데이터의 사용 권한을 관리하는 데 사용하며 GRANT, REVOKE 문 등이 있음

관계 데이터 모델

릴레이션

릴레이션(relation) : 행과 열로 구성된 테이블

릴레이션 스키마

  • 스키마의 요소
    • 속성(attribute) : 릴레이션 스키마의 열
    • 도메인(domain) : 속성이 가질 수 있는 값의 집합
    • 차수(degree) : 속성의 개수
  • 스키마의 표현
    • 릴레이션 이름(속성1 : 도메인1, 속성2 : 도메인2, 속성3 : 도메인3 …)
    EX) 도서(도서번호, 도서이름, 출판사, 가격)

릴레이션 인스턴스

인스턴스 요소
• 투플(tuple) : 릴레이션의 행
• 카디날리티(cardinality) : 투플의 수

릴레이션의 특징

➊ 속성은 단일 값을 가진다
각 속성의 값은 도메인에 정의된 값만을 가지며 그 값은 모두 단일 값이어야 함
➋ 속성은 서로 다른 이름을 가진다
속성은 한 릴레이션에서 서로 다른 이름을 가져야만 함
➌ 한 속성의 값은 모두 같은 도메인 값을 가진다
한 속성에 속한 열은 모두 그 속성에서 정의한 도메인 값만 가질 수 있음
➍ 속성의 순서는 상관없다
속성의 순서가 달라도 릴레이션 스키마는 같음
예) 릴레이션 스키마에서 (이름, 주소) 순으로 속성을 표시하거나 (주소, 이름) 순으로 표시하여도 상관없음
➎ 릴레이션 내의 중복된 투플은 허용하지 않는다
하나의 릴레이션 인스턴스 내에서는 서로 중복된 값을 가질 수 없음,
즉 모든 투플은 서로 값이 달라야 함
➏ 투플의 순서는 상관없다
투플의 순서가 달라도 같은 릴레이션임. 관계 데이터 모델의 투플은 실제적인 값을 가지고 있으며 이 값은 시간이 지남에 따라 데이터의 삭제, 수정, 삽입에 따라 순서가 바뀔 수 있음

기본키

여러 후보키 중 하나를 선정하여 대표로 삼는 키

  • 후보키가 하나뿐이라면 그 후보키를 기본키로 사용하면 되고,
    여러 개라면 릴레이션의 특성을 반영하여 하나를 선택하면 됨
  • 기본키 선정 시 고려사항
    릴레이션 내 투플을 식별할 수 있는 고유한 값을 가져야 함.
    NULL 값은 허용하지 않음.
    키 값의 변동이 일어나지 않아야 함.
    최대한 적은 수의 속성을 가진 것이라야 함.
    향후 키를 사용하는 데 있어서 문제 발생 소지가 없어야 함.
  • 릴레이션 스키마를 표현할 때 기본키는 밑줄을 그어 표시함
    릴레이션 이름(속성1, 속성2, …. 속성N)
    EX) 고객(고객번호, 이름, 주민번호, 주소, 핸드폰)
    도서(도서번호, 도서이름, 출판사, 가격)

외래키

  • 다른 릴레이션의 기본키를 참조하는 속성을 말함
  • 다른 릴레이션의 기본키를 참조하여 관계 데이터 모델의 특징인 릴레이션 간의 관계(relationship)를 표현함
  • 외래키의 특징
    관계 데이터 모델의 릴레이션 간의 관계를 표현함
    다른 릴레이션의 기본키를 참조하는 속성임
    참조하고(외래키) 참조되는(기본키) 양쪽 릴레이션의 도메인은 서로 같아야 함
    참조되는(기본키) 값이 변경되면 참조하는(외래키) 값도 변경됨
    NULL 값과 중복 값 등이 허용됨
    자기 자신의 기본키를 참조하는 외래키도 가능함
    외래키가 기본키의 일부가 될 수 있음

데이터베이스 관련 SQL

데이터베이스 목록 확인: 기존 데이터베이스 목록을 출력

show databases;

데이터베이스 생성: 새로운 데이터베이스를 생성

create database 데이터베이스명;

데이터베이스 삭제: 지정한 데이터베이스를 삭제

drop database 데이터베이스명;

사용할 데이터베이스 지정: 여러 데이터베이스 중에서 작업할 데이터베이스를 선택

use 데이터베이스명;

DB 서버

Maria DB 설치

sudo apt install mariadb-server

mariadb 접속

테이블 확인

테이블 기본 키 추가

테이블 레코드 입력

tessttable 테이블의 전체 레코드를 출력

NFS 서버

Network File System, 네트워크를 통해 다른 시스템의 디스크를 연결하여 사용

NFS 서버가 설치되어야 하고, NFS 서버 측에서 디스크 공유
(Ubuntu 20에서부터 NFS 버전 3과 4를 지원)

실습

서버
sudo apt install nfs-kernel-server
nfs-server 활성화: systemctl enable --now nfs-server
공유 디렉토리 생성: sudo mkdir /home/share -> sudo chmod 707 /home/share
sudo vi /etc/exports -> /home/share *(rw,sync,no_subtree_check,no_root_squash,insecure) 추가
sudo exportfs -a로 공유한 것이 제대로 적용되었는지 확인
방화벽 설정 ex) sudo ufw allow 2049
NFS 서버 재시작: sudo systemctl restart nfs-kernel-server

클라이언트
sudo apt install nfs-common
sudo mkdir /mnt로 마운트할 디렉토리 생성
sudo ufw allow 2049
mount로 NFS 공유 디렉토리 연결 : sudo mount nfs 192.168.139.3:/home/share /mnt

0개의 댓글