[VMware] 실습

xeomina·2022년 5월 17일
0

Linux

목록 보기
8/16

0426

5. 실습

kosa-NAT GateWay PRO.drawio

NAT_GW

  • Settings > Add ... > Network Adapter

image-20220426174111596

  • Network Adapter = Bridged
  • Network Adapter 2 = LAN segment (내부 네트워크)
    • LAN Segments... 클릭
    • Add vSwitch

image-20220426173855065

image-20220426173937816

WEB01 / WEB02 / WEB03 / NS

  • Network Adapter = LAN segment
    • vSwitch

image-20220426174230485

0427

구성도 수정

kosa-NAT GateWay PRO.drawio

실습 전 환경설정

네트워크 설정

image-20220427092654707

  • VMnet0 : 진짜 랜카드(이더넷)의 드라이브
    • 현재 사용하고 있는 Realtek(물리) 랜카드 선택

Mobaxterm 경로 설정

image-20220427094502853

image-20220427094631136

image-20220427094649360

Key 설정

image-20220427094958708

image-20220427095325619

image-20220427100653036

IP 대역

  • 공인IP = Public IP
  • 사설IP = Private IP
    • A Class 10.0.0.0 ~ 10.255.255.255
    • B Class 172.16.0.0 ~ 172.31.255.255
    • C Class 192.168.0.0 ~ 192.168.255.255
  • 강의실 네트워크
    • Public Subnet
      • 192.168.0.0/24
      • 192.168.0.0 ~ 192.168.0.255 (256개 IP - 2개 = 254개)
      • 192.168.0.0 네트워크 주소(시작 IP)
      • 192.168.0.255 브로드캐스팅 주소(마지막 IP)
    • Private Subnet
      • 10.0.23.0/24
      • 10.0.23.0 ~ 10.0.23.255 (256개 IP - 2개 = 254개)
      • 10.0.23.0 네트워크 주소(시작 IP)
      • 10.0.23.255 브로드캐스팅 주소(마지막 IP)

실습

NAT

nat 서버

  • hostname 변경
# hostnamectl set-hostname nat
  • 라우터 설정
    • ens33은 ip를 수동으로 만들어줘야 한다. (New File)
# vi /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE=Ethernet
BOOTPROTO=none
NAME=ens32
DEVICE=ens32
ONBOOT=yes
IPADDR=192.168.0.218
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=8.8.8.8
DNS2=203.248.252.2
# vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=none
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=10.0.23.1		/* 내부 라우터 ip
NETMASK=255.255.255.0	/* ip 고정하기위해 마스크
  • 네트워크 재시작
# systemctl restart network
  • IP 확인

image-20220427103708086

  • tab 자동완성 (bash-completion)
# yum install -y bash-completion
  • 랜카드 존 설정
# firewall-cmd --get-active-zone
public
  interfaces: ens32 ens33
  
# nmcli c mod ens32 connection.zone external
# nmcli c mod ens33 connection.zone internal

# firewall-cmd --get-active-zone
internal
  interfaces: ens33
external
  interfaces: ens32
  • ip forward 활성화
# sysctl -w net.ipv4.ip_forward=1		  # 리눅스 시스템을 라우터로
# sysctl -p								# 설정 저장
# reboot
# cat /proc/sys/net/ipv4/ip_forward
1
  • dhcp 데몬설치
# yum install dhcp -y
  • dhcpd.conf 파일 설정
# vi /etc/dhcp/dhcpd.conf
ddns-update-style interim;	
subnet 10.0.23.0 netmask 255.255.255.0 {				# 본인의 ip 대역 - 네트워크 지칭
option routers 10.0.23.1;
option subnet-mask 255.255.255.0;
range dynamic-bootp 10.0.23.2 10.0.23.254;				# 이론적으로는 0~255 가능, but 0: 네트워크 주소/255: 브로드캐스팅 주소/1: 라우터
option domain-name-servers 10.0.23.1, 8.8.8.8, 203.248.252.2;	 # 10.0.23.1 : ns의 IP
default-lease-time 7200;	#7200s=2h
max-lease-time 86400;		#86400s=24h
}

Cf) 만약 DNS 대란이 날 경우..?

  • 다른 ISP의 DNS 서버를 보조 DNS로 추가

    • 구글의 DNS : 8.8.8.8 / 8.8.4.4
    • LG U+의 DNS : 203.248.252.2 (현재 강의장)

image-20220427111430775

image-20220427111734416

  • enable 설정
# systemctl enable --now dhcpd

DNS

nat 서버

  • DNS 도구 설치(bind)
# yum -y install bind bind-chroot bind-utils
  • named.conf 파일 설정
    • named 데몬의 설정파일
# vi /etc/named.conf
options {
        listen-on port 53 { 127.0.0.1; 192.168.0/24; 10.0.23/24; };		#NS에 접근할 IP범위(접근제어)
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { localhost; 192.168.0/24; 10.0.23/24; };		#쿼리할 IP범위
        forwarders { 8.8.8.8; 203.248.252.2; };

        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

        # Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
view "internal" {
        zone "." IN {
                type hint;
                file "named.ca";
        };

        include "/etc/named.rfc1912.zones";
        include "/var/named/xeomina.shop.zones"; # 호스팅 영역 생성
};
  • xeomina.shop.zones 파일 설정
    • DNS db 파일을 등록하는 설정 파일 - db 파일명과 경로 설정 및 동기화
      • db 파일 안에 도메인과 IP정의
# vi /var/named/xeomina.shop.zones
zone "xeomina.shop" IN {			#도메인을 IP로(정방향)
        type master;
        file "xeomina.shop.db";
        allow-update { none; };
};

zone "23.0.10.in-addr.arpa" IN {	#IP를 도메인으로(역방향)
        type master;
        file "23.0.10.in-addr.arpa.db";
        allow-update { none; };
};
  • xeomina.shop.db 파일 설정
# vi /var/named/xeomina.shop.db
$TTL    86400
@       IN      SOA     xeomina.shop.   root.xeomina.shop.(
                        2022041401 ; Serial
                        3h         ; Refresh
                        1h         ; Retry
                        1w         ; Expire
                        1h )       ; Minimum

        IN      NS      ns.xeomina.shop.
        IN      MX 10   ns.xeomina.shop.
ns      IN      A       10.0.23.1
  • 23.0.10.in-addr.arpa.db 파일 설정
# vi /var/named/23.0.10.in-addr.arpa.db
$TTL    86400
@       IN      SOA     xeomina.shop.   root.xeomina.shop.(
                        2022042701 ; Serial
                        3h         ; Refresh
                        1h         ; Retry
                        1w         ; Expire
                        1h )       ; Minimum

        IN      NS      ns.xeomina.shop.
1       IN      PTR     ns.xeomina.shop.
  • 방화벽 설정
    • 내부에서 DNS로 접근할 수 있도록
# firewall-cmd --permanent --add-service=dns --zone=internal
# firewall-cmd --reload

# firewall-cmd --list-all --zone=internal
internal (active)
  interfaces: ens33
  services: dhcpv6-client dns mdns samba-client ssh

IP 정리

이름OSIP
NAT_GW_DHCP_HA_NSCentOS710.0.23.1
WEB01CentOS710.0.23.2
DB_SMB_NFSCentOS710.0.23.3
WEB02Ubuntu1810.0.23.4
WEB03Win201210.0.23.5
  • xeomina.shop.db 파일 설정 변경
# vi /var/named/xeomina.shop.db
$TTL    86400
@       IN      SOA     xeomina.shop.   root.xeomina.shop.(
                        2022041401 ; Serial
                        3h         ; Refresh
                        1h         ; Retry
                        1w         ; Expire
                        1h )       ; Minimum

        IN      NS      ns.xeomina.shop.
        IN      MX 10   ns.xeomina.shop.
nat     IN      A       192.168.0.218
ns      IN      A       10.0.23.1
web01   IN      A       10.0.23.2
db      IN      A       10.0.23.3
web02   IN      A       10.0.23.4
web03   IN      A       10.0.23.5
  • named 재시작
# systemctl restart named
  • 방화벽 설정
    • 외부에서도 dns 접근가능하게
    • nat 서버에 도메인으로 접속 시도
# firewall-cmd --permanent --add-service=dns --zone=external
# firewall-cmd --reload
  • 로컬 dns 서버 변경

image-20220427123201057

  • ip 확인

image-20220427123316668

  • ping 확인

image-20220427123724191

NAT

nat 서버

  • DNS 수동설정 - 자기 자신의 도메인 설정
# vi /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE=Ethernet
BOOTPROTO=none
NAME=ens32
DEVICE=ens32
ONBOOT=yes
IPADDR=192.168.0.218
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=10.0.23.1		#추가
DNS2=8.8.8.8
DNS3=8.8.4.4
PEERDNS=no			#추가 - 만들어놓은 DNS 최우선
PROXY_METHOD=none
BROWSER_ONLY=no
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
UUID=152beb06-47c5-c5e8-95a9-385590654382
ZONE=external
  • 네트워크 재시작 및 확인
# systemctl restart network

# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 10.0.23.1		#추가됨
nameserver 8.8.8.8
nameserver 8.8.4.4
  • DNS 확인(역방향)
# dig -x 10.0.23.1	

;; ANSWER SECTION:
1.23.0.10.in-addr.arpa. 86400   IN      PTR     ns.xeomina.shop.

image-20220427141539652

  • DNS 확인(정방향)
# dig A web01.xeomina.shop
;; ANSWER SECTION:
web01.xeomina.shop.     86400   IN      A       10.0.23.2

image-20220427141623591

  • nslookup 도구 사용 - DNS확인
# nslookup web02.xeomina.shop
Server:         10.0.23.1
Address:        10.0.23.1#53

Name:   web02.xeomina.shop
Address: 10.0.23.4

image-20220427142834027

  • CNAME
    • 하나의 IP에 두개의 도메인 연결
$TTL    86400
@       IN      SOA     xeomina.shop.   root.xeomina.shop.(
                        2022041401 ; Serial
                        3h         ; Refresh
                        1h         ; Retry
                        1w         ; Expire
                        1h )       ; Minimum

        IN      NS      ns.xeomina.shop.
        IN      MX 10   ns.xeomina.shop.
nat     IN      A       192.168.0.218
ns      IN      A       10.0.23.1
web01   IN      A       10.0.23.2
db      IN      A       10.0.23.3
web02   IN      A       10.0.23.4
web03   IN      A       10.0.23.5
test    IN      CNAME   db			#추가
  • named 재시작
# systemctl restart named
  • ping 확인
# ping test.xeomina.shop

image-20220427143314152

윈도우 라우팅 테이블 추가

  • 라우팅 테이블에 라우팅 정보를 Add
    • route add {IP 주소} mask {서브넷 마스크} {게이트웨이}
    • IP 주소 : 10.0.23.0
    • 서브넷 마스크 : 255.255.255.0
    • 게이트웨이 : 192.168.0.218 (NAT GW)
C:\Windows\system32>route add 10.0.23.0 mask 255.255.255.0 192.168.0.218
  • ping 확인

image-20220427144728295

포트포워딩

  • WEB01
# firewall-cmd --permanent --zone=external --add-forward-port=port=221:proto=tcp:toport=22:toaddr=10.0.23.2
  • WEB02
# firewall-cmd --permanent --zone=external --add-forward-port=port=222:proto=tcp:toport=22:toaddr=10.0.23.4
  • DB
# firewall-cmd --permanent --zone=external --add-forward-port=port=223:proto=tcp:toport=22:toaddr=10.0.23.3
  • WEB03
    • 윈도우 원격 데스크톱 포트 : tcp = 3389 / guest = 3389
# firewall-cmd --permanent --zone=external --add-forward-port=port=3389:proto=tcp:toport=3389:toaddr=10.0.23.5	

윈도우 원격 접속

  • 윈도우는 ssh 대신 원격접속으로

web03 서버

image-20220427153151438 image-20220427153430965

  • 방화벽 설정
    • Port를 허용하는 룰 생성

image-20220427154552470 image-20220427160544117

image-20220427154654284

  • 원격 데스크톱 포트 : 3389

image-20220427154715744

image-20220427155426194

  • http 포트 : 80

image-20220427155348191

image-20220427155447870

로컬 윈도우

  • 원격 데스크톱 연결 검색

image-20220427152314184

  • NAT GW의 ip입력

image-20220427152830239

  • 로그인

image-20220427153710865

image-20220427153739959

  • key 복사
>ssh-copy-id -p 221 -i id_rsa.pub root@192.168.0.218
>ssh-copy-id -p 222 -i id_rsa.pub xeomina@192.168.0.218	#ubuntu 사용자
>ssh-copy-id -p 223 -i id_rsa.pub root@192.168.0.218
  • Mobaxterm에서도 RDP 가능

image-20220427162543709

DB 구축

db 서버

  • MariaDB repository 설정
# vi /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB		#패키지 이름 지정
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
  • MariaDB 설치 및 확인
# yum install -y MariaDB	#설정한 패키지 이름
# rpm -qa | grep MariaDB
# mariadb --version
  • start & enable 설정
# systemctl enable --now mariadb
  • secure 설정
    • Disallow root login remotely? : n으로
# mysql_secure_installation
  • DB 생성 및 사용자 설정
# systemctl restart mariadb
# mysql -u root -p

> CREATE USER 'wpuser'@'%' IDENTIFIED BY 'kosa0401';
> CREATE DATABASE IF NOT EXISTS wordpress;
> GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'%';
> EXIT
  • 방화벽 설정
# firewall-cmd --permanent --add-service=mysql
# firewall-cmd --reload

웹서버 구축

  • HTTPD(Hyper Text Transfer Protocol Daemon)
    • AWS Linux (apache, nginx)
    • WIN (IIS:Internet Information Services)
  • web01 : apache
  • web02 : nginx
  • web03 : IIS

web01 서버 - apache

  • httpd 설치
# yum install -y httpd
  • start & enable 설정
# systemctl enable --now httpd
  • 방화벽 설정
# firewall-cmd --permanent --add-service=http
# firewall-cmd --reload
  • firewalld 확인
# rpm -qa | grep firewalld
# systemctl status firewalld

web03에서 확인

  • Webshare에서 Chrome 다운로드

image-20220427171853536

  • web01.xeomina.shop 접속

image-20220427172020914

web02 서버 - nginx

  • update
    • apt-get : 우분투의 패키지 매니저
$ sudo apt-get update
  • nginx 설치
    • 설치와 동시에 start & enable 설정됨
$ sudo apt-get install nginx -y

web03에서 확인

  • web02.xeomina.shop 접속

image-20220427172614358

web03 서버 - IIS

  • Server

image-20220427173407438

image-20220427173434621

image-20220427173455665

image-20220427173551460

image-20220427173823568

로드밸런싱

nat 서버

  • haproxy 설치
# yum install -y haproxy
  • haproxy.cfg 파일 설정
# vi /etc/haproxy/haproxy.cfg
global
    daemon

defaults
    mode               http

frontend  http-in
    bind *:80
    default_backend    backend_servers

backend backend_servers
    balance            roundrobin
#    cookie  SVID insert indirect nocache maxlife 3m
    server             web01 10.0.23.2:80 cookie check
    server             web02 10.0.23.4:80 cookie check
    server             web03 10.0.23.5:80 cookie check
  • start & enable
# systemctl enable --now haproxy
  • 방화벽 설정
# firewall-cmd --list-all --zone=external
# firewall-cmd --permanent --add-service=http --zone=external
# firewall-cmd --reload
  • 로컬 윈도우에서 nat.xeomina.shop 접속

image-20220427175051848

0428

웹페이지 꾸미기

각 OS의 html root 폴더

  • CentOS HTTPD (Apache) : /var/www/html/
  • Ubuntu Nginx : /var/www/html/
    • Ubuntu Docker Nginx : /usr/share/nginx/html/
  • Window IIS : C:\inetpub\wwwroot\

web01 서버

  • 경로이동 / 표준 출력 재지정
# cd /var/www/html
# echo "<h1>WEB01</h1>" > index.html

Cf) 리눅스의 입출력 재지정(redirection)

  • 기본적으로 리눅스의 표준 입력(standard input)은 키보드이고 표준 출력 (standard output)은 모니터 혹은 터미널윈도이다.

  • 출력 재지정(output redirection) :

    • 명령어의 표준 출력 내용을 모니터에 출력하는 대신에 파일에 저장하거나 다른 명령어의 입력으로 인가할 수 있다.

    • 이때 사용되는 기호가 >와 | 이다.

      명령어 > 파일명
  • 입력 재지정 (input redirection) :

    • 명령어의 표준 입력을 키보드 대신 파일에서 받을 수 있다.

    • 이 때 < 연산자가 이용된다.

      명령어 < 파일명

web02 서버

  • index.html 파일 찾기
$ sudo find / -name index.html
  • 경로이동 및 index.html 파일 백업
$ cd /var/www/html/
$ sudo mv index.nginx-debian.html index.nginx-debian.html.bak
  • index.html 파일 수정

    • sudo로 root처럼

      $ sudo echo "<h1>WEB02</h1>" > index.html

web03 서버

  • index.html.text 파일 생성

image-20220428093214229

  • 내용 입력

image-20220428093247829

  • 확장자 .html로 변경

image-20220428093435405

nat 페이지 확인

image-20220428094557099

image-20220428094609915

image-20220428094623041

HAproxy 설정

nat 서버

  • haproxy.cfg 파일 설정
global
    daemon
defaults
    mode               http
frontend  http-in
    bind *:80
    default_backend    backend_servers
backend backend_servers
    balance            roundrobin
    cookie  SVID insert indirect nocache maxlife 10s
    server             web01 10.0.23.2:80 cookie w1 check
    server             web02 10.0.23.4:80 cookie w2 check
    server             web03 10.0.23.5:80 cookie w3 check

세부 사항

  • layer
    • 총 7개의 레이어 중 로드밸런서는 L7, L4 두개
      • L7(Application Layer) : Application 계층을 사용, 요청(URL) 기반 부하 분산
      • L4(Transport Layer) : Transport Layer(IP+Port) Load Balancing
      • TCP, UDP Protocol
      • 장점 : Port기반 스위칭 지원, VIP를 이용하여 여러대를 한대로 묶어 부하분산
mode               http		#http : L7(Application Layer) S/W (상위)
	               tcp		#tcp  : L4(Transport Layer) S/W (하위)
  • frontend / backend
frontend  http-in			# front 이름 : http-in (변경 가능) 
    bind *:80				# *: 접근제어에서 anywhere의 의미 / 80 port(default)
    default_backend    backend_servers	# back에서 정의한 backend_servers로 연결

backend backend_servers			# back 이름 : backend_servers
    balance            roundrobin	# 로드밸런서 알고리즘 : roundrobin(서버에 순차적으로 접근)

로그인 버튼 누를떄마다 다른 서버로 세션 바뀜 -> 하나의 서버에 일정시간 동안은 머물러야 함 -> 고정 세션

  • 쿠키 이름 지정
  • 고정세션으로 만들기 위해 쿠키를 구울때 이름 지정 -> 클라이언트
    cookie  SVID insert indirect nocache maxlife 10s		# sticky sesstion(고정세션)
    server             web01 10.0.23.2:80 cookie w1 check	# w1
    server             web02 10.0.23.4:80 cookie w2 check
    server             web03 10.0.23.5:80 cookie w3 check

SAMBA

db 서버

  • samba 설치
# yum install -y samba
  • share 폴더 생성 및 권한 설정
# mkdir -p /var/samba/share
# chmod 777 /var/samba/share
  • 리눅스 사용자 생성
# adduser kosa
# passwd kosa
New password:koda0401
  • 삼바에서 리눅스 사용자 이용할 수 있도록 passwd 지정
# smbpasswd -a kosa
  • smb.conf 설정
# vi /etc/samba/smb.conf
[global]
        workgroup = SAMBA	  # 설정 변경 안해도 됨
        
[share]						# 추가
        comment = Share Directory
        path = /var/samba/share
        browserable = yes
        writable = yes
        valid users = kosa
        create mask = 0777
        directory mask = 0777
  • start & enable
# systemctl enable --now smb nmb
  • 방화벽 설정
    • zone=public : 랜카드 하나 > internal/external zone 구분 안해도 됨 > public 생략가능(default)
# firewall-cmd --permanent --add-service=samba --zone=public
# firewall-cmd --reload

web03 서버 (클라이언트)

  • ping 확인

image-20220428104308687

  • samba 접속
\\db.xeomina.shop

image-20220428104709214

  • samba 사용자 로그인

image-20220428104626764

  • share 폴더 확인

image-20220428104834253

  • 워드프레스 다운로드

image-20220428104814938

  • share 폴더에 워드프레스 파일 넣기

image-20220428104915724

db 서버

  • share 폴더안에 워드프레스 파일 확인
# cd /var/samba/share/
# ls
wordpress-5.9.3-ko_KR.zip

NFS

db 서버

  • nfs 설치
# yum install -y nfs-utils
  • share 폴더 생성 및 이동
    • 최상위폴더(/) 밑에 생성
# mkdir /share && cd $_	
  • samba의 워드프레스 파일 복사
    • 현재폴더(.)로
# cp /var/samba/share/wordpress-5.9.3-ko_KR.zip .
# ls
wordpress-5.9.3-ko_KR.zip
  • share 폴더 접근제어
    • nfs는 주로 로컬에서 이용
    • 접근 가능한 내부 ip범위 정의
# vi /etc/exports
/share 10.0.23.0/24(rw,sync)
/share *(rw,sync)			# *: anywhere
  • 권한 설정
# chmod 707 /share
  • start & enable
# systemctl enable --now nfs-server
  • fs 확인
    • sync, rw 외는 default
# exportfs -v
/share          <world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
  • 방화벽 설정
# firewall-cmd --permanent --add-service=nfs
# firewall-cmd --permanent --add-service=rpc-bind
# firewall-cmd --permanent --add-service=mountd
# firewall-cmd --reload

nat / web01서버 (클라이언트 )

CentOS

  • nfs 설치
# yum install -y nfs-utils
  • 공유가능한 디렉토리 확인
    • nfs 서버와 mount 가능한지..
# showmount -e db.xeomina.shop
Export list for db.xeomina.shop:
/share *
  • share 폴더 생성
# mkdir share
  • 마운트
# mount -t nfs db.xeomina.shop:/share /root/share
  • 마운트 확인
# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 899M     0  899M   0% /dev
tmpfs                    910M     0  910M   0% /dev/shm
tmpfs                    910M  9.5M  901M   2% /run
tmpfs                    910M     0  910M   0% /sys/fs/cgroup
/dev/mapper/centos-root   97G  1.5G   96G   2% /
/dev/sda1               1014M  195M  820M  20% /boot
tmpfs                    182M     0  182M   0% /run/user/0
db.xeomina.shop:/share    97G  2.0G   96G   2% /root/share
  • share 폴더 확인
# ls share/
wordpress-5.9.3-ko_KR.zip
  • fstab 파일 설정
    • fstab : 파일 시스템에 대한 정보를 고정적으로 저장
    • 시스템이 부팅될 때 자동으로 마운트하도록 설정
# cp /etc/fstab /etc/fstab.bak
# echo "db.xeomina.shop:/share /root/share nfs defaults 0 0" >> /etc/fstab

web02 서버 (클라이언트)

Ubuntu

  • nfs 설치
$ sudo apt-get update
$ sudo apt-get install -y nfs-common
  • 마운트
    • CentOS와 경로 다름
$ sudo mount -t nfs db.xeomina.shop:/share /home/xeomina/share
  • 마운트 및 share 폴더 확인
$ df -h
$ ls share/
  • fstab 파일 설정
$ sudo cp /etc/fstab /etc/fstab.bak

$ sudo vi /etc/fstab
db.xeomina.shop:/share /home/xeomina/share nfs defaults 0 0

web03 서버 (클라이언트)

Window 2012

  • Control Panel > Turn Windows features on or off

image-20220428122632011

  • Client for NFS 설치

image-20220428122815768

image-20220428122829618

  • 관리자 권한으로 명령 프롬프트 실행

image-20220428123005261

  • ping 확인
> ping db.xeomina.shop

image-20220428123053639

  • 마운트
> mount db.xeomina.shop:/share z:\

image-20220428123408056

  • 마운트 확인

image-20220428123433063

  • 파일 확인

image-20220428123604110

워드프레스 설치

각 서버에 접속하기 전 nat에서 다른 서버 주석처리 하기

web01 서버

  • remi 저장소 설치
    • 가장 최신의 LAMP(Linux, Apache, MySQL, PHP) 기반의 스택을 제공하는 외부 yum repository
    • php 을 버전별로 나뉘어서 제공하므로 한 서버에 다양한 버전의 php를 같이 사용 가능
# yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
  • 기타 패키지 설치
    • EPEL(Extra Package for Enterprise Linux)
# yum -y install epel-release yum-utils
  • configmanager 로 remi-php74 사용
# yum-config-manager --enable remi-php74
  • php 설치
    • 7.4 버전으로
# yum install -y httpd php php-mysql php-gd php-mbstring wget unzip
  • 경로 이동 및 워드프레스 압축 풀기
# cd /var/www/html
# unzip /root/share/wordpress-5.9.3-ko_KR.zip
# ls
index.html  wordpress
  • wordpress안의 파일 현재 경로로 이동
# mv wordpress/* .
# ls
index.html   wp-activate.php       wp-content         wp-login.php      xmlrpc.php
index.php    wp-admin              wp-cron.php        wp-mail.php
license.txt  wp-blog-header.php    wp-includes        wp-settings.php
readme.html  wp-comments-post.php  wp-links-opml.php  wp-signup.php
wordpress    wp-config-sample.php  wp-load.php        wp-trackback.php
  • apache에게 소유권 부여
# chown -R apache:apache /var/www/*
  • index.html 변경
# mv index.html index.html.bak
  • httpd 재시작
# systemctl restart httpd

nat 서버

  • 쿠키 설정 변경
    • web01 빼고 주석처리
# vi /etc/haproxy/haproxy.cfg
backend backend_servers
    balance            roundrobin
    cookie  SVID insert indirect nocache maxlife 10m
    server             web01 10.0.23.2:80 cookie w1 check
#    server             web02 10.0.23.4:80 cookie w2 check
#    server             web03 10.0.23.5:80 cookie w3 check
  • haproxy 재시작
# systemctl restart haproxy
  • 워드프레스 접속

image-20220428144846298

image-20220428145000223

image-20220428154414069

web02 서버

Ubuntu에서 워드프레스 설치하기

  • nginx 설치
$ sudo apt update && sudo apt upgrade -y
$ sudo apt install -y nginx
  • php 설치
    • 7.2 버전
$ sudo apt install -y php7.2 php7.2-fpm php7.2-mysql php7.2-mbstring php7.2-gd wget unzip
  • public_html 폴더 생성
$ sudo mkdir -p /var/www/html/wordpress/public_html
  • 경로이동
    • sites-available 폴더
$ cd /etc/nginx/sites-available
  • wordpress.conf 파일 설정
    • 나만의 웹서버를 위한 conf 파일
$ sudo vi wordpress.conf
server {
            listen 80;
            root /var/www/html/wordpress/public_html;
            index index.php index.html;
            server_name nat.xeomina.shop;	#수정
            access_log /var/log/nginx/SUBDOMAIN.access.log;
            error_log /var/log/nginx/SUBDOMAIN.error.log;

            location / {
                         try_files $uri $uri/ =404;
            }

            location ~ \.php$ {
                         include snippets/fastcgi-php.conf;
                         fastcgi_pass unix:/run/php/php7.2-fpm.sock;
            }
            
            location ~ /\.ht {
                         deny all;
            }

            location = /favicon.ico {
                         log_not_found off;
                         access_log off;
            }

            location = /robots.txt {
                         allow all;
                         log_not_found off;
                         access_log off;
           }
       
            location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                         expires max;
                         log_not_found off;
           }
}
  • nginx 상태 확인
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
  • 경로이동
    • sites-enabled
$ cd /etc/nginx/sites-enabled
$ ls
default
  • wordpress.conf 파일 심볼릭 링크 생성
    • ln -s [원본 파일 또는 디렉토리] [심볼릭 링크 이름]
    • available 한 설정파일이 enabled 되는 과정
$ sudo ln -s ../sites-available/wordpress.conf .
  • 심볼릭 링크 확인
$ ls -al
total 8
drwxr-xr-x 2 root root 4096 Apr 28 16:31 .
drwxr-xr-x 8 root root 4096 Apr 28 16:11 ..
lrwxrwxrwx 1 root root   34 Apr 27 17:23 default -> /etc/nginx/sites-available/default
lrwxrwxrwx 1 root root   33 Apr 28 16:31 wordpress.conf -> ../sites-available/wordpress.conf
  • nginx 재시작
$ sudo systemctl reload nginx
  • 경로이동 및 워드프레스 다운/압축 풀기
    • 최신버전
$ cd /var/www/html/wordpress/public_html
$ sudo wget https://ko.wordpress.org/latest-ko_KR.zip
$ sudo unzip latest-ko_KR.zip
$ ls
latest-ko_KR.zip  wordpress
  • wordpress안의 파일을 현재 경로로 이동
$ sudo mv wordpress/* .
$ ls
index.php         wp-activate.php       wp-content         wp-login.php      xmlrpc.php
latest-ko_KR.zip  wp-admin              wp-cron.php        wp-mail.php
license.txt       wp-blog-header.php    wp-includes        wp-settings.php
readme.html       wp-comments-post.php  wp-links-opml.php  wp-signup.php
wordpress         wp-config-sample.php  wp-load.php        wp-trackback.php
  • www-data에게 소유권 및 권한 부여
    • [nginx의 사용자] : [그룹명]
$ sudo chown -R www-data:www-data *
$ sudo chmod -R 755 *
  • nginx 재시작
$ sudo systemctl restart nginx

nat 서버

  • 쿠키 설정 변경
    • web02 빼고 주석처리
# vi /etc/haproxy/haproxy.cfg
backend backend_servers
    balance            roundrobin
    cookie  SVID insert indirect nocache maxlife 10m
#    server             web01 10.0.23.2:80 cookie w1 check
    server             web02 10.0.23.4:80 cookie w2 check
#    server             web03 10.0.23.5:80 cookie w3 check
  • haproxy 재시작
# systemctl restart haproxy
  • 워드프레스 접속

image-20220428154414069

web03 서버

  • IIS Manager > WIN-EH74ULVAH5S 클릭

image-20220428123808440

  • Web Platform Installer 다운로드

image-20220428123953590

  • Web Platform Installer 설치

image-20220428124045854 image-20220428141144050

  • Server Manager > Tools > IIS Manager

image-20220428140408403

  • Web Platform Installer 클릭

image-20220428140433613

  • php 7.4 설치

image-20220428140821053

image-20220428140953712

  • 워드프레스 파일 경로 이동
    • C:\inetpub\wwwroot

image-20220428153853307

  • 기존 index 파일 변경
    • iisstart.htm.bak
    • index.html.bak

image-20220428153943162

  • 워드프레스 파일 압축 해제

image-20220428154305211

web01 서버

  • web01에서 wp-config.php파일 옮겨오기
  • share 폴더 이용
# cp wp-config.php /root/share/

web03 서버

  • share 폴더에서 wp-config.php 파일 확인

image-20220428154214879

  • wp-config.php 파일 이동
    • C:\inetpub\wwwroot

image-20220428154250569

  • 워드프레스 접속

image-20220428154414069

nat 서버

  • haproxy.cfg 파일 설정
    • wp-conf.php 동기화 > 고정세션 필요x
    • 쿠키 주석처리 및 web 서버 모두 열어주기
# vi /etc/haproxy/haproxy.cfg
backend backend_servers
    balance            roundrobin
#    cookie  SVID insert indirect nocache maxlife 10m
    server             web01 10.0.23.2:80 cookie w1 check
    server             web02 10.0.23.4:80 cookie w2 check
    server             web03 10.0.23.5:80 cookie w3 check
  • haproxy 재시작
# systemctl restart haproxy

워드프레스 설치완료

  • web01,02,03 동기화

image-20220428154414069

L7 기능 구현

  • HAproxy가 접속자 환경 분석까지...

web01 서버

  • 경로이동
# cd /var/log/httpd
  • 접속에 대한 로그 데이터
# cat access_log
0.0.23.1 - - [29/Apr/2022:18:25:21 +0900] "GET / HTTP/1.1" 200 53817 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"


10.0.23.1 - - [29/Apr/2022:18:25:57 +0900] "GET /favicon.ico HTTP/1.1" 404 209 "http://nat.xeomina.shop/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0"

10.0.23.1 - - [29/Apr/2022:18:48:06 +0900] "GET / HTTP/1.1" 200 53871 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 15_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/100.0.4896.85 Mobile/15E148 Safari/604.1"

HTTP Header

  • User-agent : 접속자들의 정보 걸러서 ? 포워드 ?

nat 서버

# cd /etc/haproxy/
# cp haproxy.cfg haproxy.cfg.bak2

#  vi /etc/haproxy/haproxy.cfg
global
    daemon

defaults
    mode               http

frontend  http-in
    bind *:80	# L4 S/W (TCP Port)
    acl firefox hdr_sub(User-Agent) Firefox	# acl : access control list(접근 제어 목록)
    acl trident hdr_sub(User-Agent) Trident	# L7 S/W (Content S/W)
    default_backend    backend_servers		# 조건에 맞지않는 서버는 default_backend
    use_backend bk_firefox if firefox
    use_backend bk_trident if trident

backend backend_servers
    balance            roundrobin
#    cookie  SVID insert indirect nocache maxlife 10s
    server             web01 10.0.23.2:80 cookie w1 check
    server             web02 10.0.23.4:80 cookie w2 check
    server             web03 10.0.23.5:80 cookie w3 check

backend bk_firefox
    server             web01 10.0.23.2:80
backend bk_trident
    server             web02 10.0.23.4:80
  • 웹서버에서 php파일 말고 html 파일이 index로 되도록
  • firefox

image-20220429104937344

  • Internet explorer

image-20220429105039151

  • Chrome은 web01,02,03

image-20220429105128100

0개의 댓글