220415

HyeonKi Jo·2022년 4월 15일
0
post-thumbnail

설계

팀플

  • 발표 : 동영상 만들기
  • 진행되었던 스크립드(명령어) 정리
  • 보고서 양식 작성
  • 각 서버 한명씩 맡아서 작업할 것이다. (정해야함)

VM 설정

  • 기존 폴더에 모든 내용, VM다 지우고 다시설치 (windows 사용자 /.ssh 에 파일 다 지운다.
  • 가상머신 가져오기 -> 모든 네트워크 워댑터 새 MAC생성
  • 그 후 정해진 이름과 모든 네트워크 어댑터 새 MAC생성으로 VM 들을 복사해준다.

NAT GW_DHCP_HAproxy(192.168.0.95)

NAT설정

  • 설정

    • 어댑터 1: 어댑터의 브릿지
    • 어댑터 2: 내부 네트워크
  • NAT가 중추역할을 한다. 라우터와 DHCP가 분리되어 있을 수 있지만,
    실습용으로 서버하나에 여러 역할을 맡은 것이다.

  • 먼저 CMD에서 ssh root@~~ 로 접속해준다.

  • mkdir /root/.ssh : .ssh폴더를 만들어준다.

  • exit : 다시 cmd로 나가줌

  • ssh-keygen -t rsa : 키 생성
    - Enter file in which to save the key (C:\Users\r2com/.ssh/id_rsa): 키 위치 변경? 엔터

    • Enter passphrase (empty for no passphrase): 비밀번호 설정, 엔터
  • cd %UserProfile%\/.ssh : .ssh로 이동

  • scp id_rsa.pub root@192.168.0.95:/root/.ssh/authorized_keys : 자물쇠를 NAT에게 넘긴다.

  • ren id_rsa my-key.pem : id_rsa를 my-key로 이름바꾸기

  • ssh -i my-key.pem root@192.168.0.95 : NAT에 접속

  • vi /etc/ssh/sshd_config : 여기서 PasswordAuthentication no로 바꿔준다. 키를 사용해서 접근하고 암호를 사용하지 않겠다.
    - /Pass로 검색하며 바로 나온다.

  • systemctl restart sshd 로 새로고침 해준다.

selinux해제

  • vi /etc/sysconfig/selinux : SELINUX=disable 시킨다
  • setenforce 0 : reboot없이 바로 disable시키기
  • sestatus : 입력 후, Current mode가 permissive 여야한다.

강의실 네트웥크

  • Public Subnet (= 외부, external, frontend)
  • 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 (= 내부, internal, backend)
  • 172.31.0.0/24
  • 172.31.0.0 ~ 172.31.0.255 (256개 IP - 2개 = 254개)
  • 172.31.0.0 네트워크 주소(시작 IP)
  • 172.31.0.255 브로드캐스틴 주소(마지막 IP)

호스트 이름 변경

  • hostnamectl set-hostname nat

ip 고정하기

  • DNS가 1~2가 있는 이유는, DNS1이 응답이 안될 때, DNS2의 추가 서버가 필요하기 때문이다.
  • cp /etc/sysconfig/network-scripts/ifcfg-enp0s3 /etc/sysconfig/network-scripts/ifcfg-enp0s3.bak : 변경하기 전에 백업해놓기
  • vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 : 랜카드 설정하기
    - ggdG로 내용을 모두 지운다.
TYPE=Ethernet
BOOTPROTO=none ## 여기를 static으로 줄수도있다.
NAME=enp0s3
DEVICE=enp0s3
ONBOOT=yes
IPADDR=[IPADDRESS]
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=8.8.8.8 
DNS2=8.8.4.4
  • vi /etc/sysconfig/network-scripts/ifcfg-enp0s8 : 랜카드 설정하기
    - 내부 네트워크를 사용하기 때문에 랜카드는 잡혔지만, 파일이 존재하지 않는다. 따라서 새로 만들어 줘야 한다.
    • 내부 네트워크들이 이걸 바라보는 GATEWAY가 되어야 한다.
    • type, Bootproto, Device, Onboot, IP주소, Net마스크만 설정한다.
TYPE=Ethernet
BOOTPROTO=none
NAME=enp0s8
DEVICE=enp0s8
ONBOOT=yes
IPADDR=172.31.0.1
NETMASK=255.255.255.0
  • systemctl restart network : network를 설정한 후 재부팅해준다.
  • ping google.com : 해서 ping이 나가는지 확인한다.

firewall 설정

  • firewall-cmd --get-active-zone : 내가 활성화 한 영역을 보여라
    - 현재 랜카드들이 public에 하나로 묶여있다. 우리 Diagram을 보면, 외부, 내부 랜카드들을 나눠야 한다.
  • nmcli c mod enp0s3 connection.zone external : enp0s3를 external(외부)에 배치시키겠다.
  • nmcli c mod enp0s8 connection.zone internal : 마찬가지로enp0s8을 internal(내부)에 배치시키겠다.

ip forward 설정

  • sysctl -w net.ipv4.ip_forward=1 : ipforward기능을 1(activate, 활성)한다.
  • sysctl -p : 1로 설정한 위 설정을 저장
  • cat /proc/sys/net/ipv4/ip_forward: 1로 나오는지 확인한다.

DHCP

  • 통신의 역할이 아닌 IP를 자동으로 부여하기 위함이다.
  • 통신의 역할은 방금 설정에서 끝났다.
  • yum install dhcp -y : dhcp설치
  • vi /etc/dhcp/dhcpd.conf : dhcp 설정
ddns-update-style interim;
subnet 172.31.0.0 netmask 255.255.255.0 {
# = 172.31.0.0/24 # 위 정보를 간단히 표현하는 주석이다.
option routers 172.31.0.1; ##방금 NAT설정할 떄 internal이었던 enp0s8 (172.31.0.1)의 IP주소를 작성한다.
option subnet-mask 255.255.255.0;
range dynamic-bootp 172.31.0.100 172.31.0.110; ##부여할 IP주소를 100번부터 110번까지로 제한하겠다.
option domain-name-servers 8.8.8.8, 8.8.4.4;
default-lease-time 7200; #IP대여시간
max-lease-time 86400; #클라이언트 요청시 최대 대여시간
}
  • systemctl enable -now dhcpd : dhcp시작
  • 각 서버들에 가서 systemctl restart network를 진행하면 ip를 받게 된다.
  • ping google.com 으로 ping이 잘 나가는 것을 볼 수 있다.

포워드 설정

  • firewall-cmd --permanent --zone=external --add-forward-port=port=223:proto=tcp:toport=22:toaddr=172.31.0.100
  • firewall-cmd --permanent --zone=external --add-forward-port=port=221:proto=tcp:toport=22:toaddr=172.31.0.101
  • firewall-cmd --permanent --zone=external --add-forward-port=port=222:proto=tcp:toport=22:toaddr=172.31.0.102

  • firewall-cmd --reload: 잊지말고 reload 꼭 해줘야 한다.
  • firewall-cmd --list-all --zone=external : 설정이 잘 됬는지 확인해본다.

MobaXterm 접속

  • 접속, session -> ssh -> nat머신 IP주소, 사용자 root, ssh 키 my-key.pem으로 설정, 북마크 192.168.0.95(NAT)로 설정 후 시작


    각 VM에 키 전송하기
  • mobaXterm에서 현재 위치가 /root/임을 확인한다.
  • 왼쪽 Quick coonect아래 위로 화살표 아이콘이 업로드 아이콘이고, id_rsa.pub을 업로드한다.
  • ls명령으로 업로드 확인
  • ssh-copy-id -i id_rsa.pub : ssh-copy-id는 ssh키 파일을 전송하기 위한 전용 cp명령어이다. (실행 안됨 흙흙)
  • cp authorized_keys authorized_keys.pub : windows에서 받은 public key를 .pub을 붙혀서 복사한다.
  • ssh-copy-id -i authorized_keys.pub root@172.31.0.100 : 각VM에게 public key보낸다.
  • ssh-copy-id -i authorized_keys.pub root@172.31.0.101
    : ssh-copy-id는 ssh전용 cp명령어이다.
  • ssh-copy-id -i authorized_keys.pub root@172.31.0.102
  • chmod 400 my-key.pem
  • ssh -i my-key.pem root@172.31.0.101

  • NAT세션을 복제해서 포트 변경, 이름 변경하면 모두 다 접속 되는 것을 볼 수 있다.
  • hostnamectl set-hostname ~~~ : 로 각각의 호스트이름을 변경한다.

NS_DATABASE (172.31.0.101)

  • DNS의 호스트네임을 주로 ds로 사용한다.
  • 설정
    • 어댑터 1: 내부 네트워크
  • 로컬 DNS를 사용할 수 있도록, 내부 네트워크에서만 쓸 수 있는 DNS를 구성해 보자.
  • yum -y install bind bind-chroot bind-utills : 기본 도구 설치
  • vi /etc/named.conf : dns 를 설정한다.
options {
        listen-on port 53 { 127.0.0.1; 192.168.0/24; 172.31.0/24; };
        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; 172.31.0/24; };
        forwarders { 8.8.8.8; 8.8.4.4; };

        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/cocudeny.shop.zones";
};
  • vi /var/named/cocudeny.shop.zones : zones파일을 만든다.
zone "cocudeny.shop" IN {
        type master;
        file "cocudeny.shop.db";
        allow-update { none; };
};

zone "0.31.172.in-addr.arpa" IN {
        type master;
        file "0.31.172.in-addr.arpa.db";
        allow-update { none; };
};
  • `vi /var/named/cocudeny.shop.db : DNS설정
$TTL    86400
@       IN      SOA     cocudeny.shop.   root.cocudeny.shop.(
                        2022040401 ; Serial
                        3h         ; Refresh
                        1h         ; Retry
                        1w         ; Expire
                        1h )       ; Minimum

        IN      NS      ns.cocudeny.shop.
        IN      MX 10   ns.cocudeny.shop.
ns      IN      A       172.31.0.100  #------- 위 도메인은 우리가 설정하지만, Public cloud에서는 우리가 수정할 수 있는것 A레코드 뿐이다.
web01   IN      A       172.31.0.101
web02   IN      A       172.31.0.102
  • vi /var/named/0.31.172.in-addr.arpa.db : DNS 역방향 설정
$TTL	86400
@	IN	SOA	cocudeny.shop.	root.cocudeny.shop.(
			2022040401 ; Serial
			3h         ; Refresh
			1h         ; Retry
			1w         ; Expire
                        1h )       ; Minimum

	IN	NS	ns.cocudeny.shop.
100	IN	PTR	ns.cocudeny.shop. # <- 이곳에서 100은 DNS서버의 IP주소의 마지막 숫자이다.
  • systemctl start named && systemctl enable named : named 서버 시작 및 자동시작
  • firewall-cmd --permanent --add-service=dns
  • firewall-cmd --reload

NAT

  • vi /etc/dhcp/dhcpd.conf : option domain-name-servers 172.31.0.100, 8.8.8.8, 8.8.4.4
  • systemctl restart dhcpd : 리스타트 해준다.
  • vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
    - DNS1=172.31.0.100 : DNS1을 ns서버 IP로 바꿔준다.
  • systemctl restart network: 네트워크 설정이 바뀌었으니 리스타트 해준다.
  • NAT서버도 reboot해준다.

각 서버들

  • systemctl restart NetworkManager
  • cat /etc/resolv.conf : 해서 nameserver에 172.31.0.100이 나와있는지 확인한다.
  • setenforce 0 : 혹시 selinux가 켜져있다면 꺼놓는다.
  • vi /etc/sysconfig/selinux
    - SELINUX=disabled : disabled해준다.

대표적인 레코드
SOA : 다루는 도메인 버전과 업데이트 시간 간격 등의 정보를 저장하는 레코드
A : 호스트 이름으로 IPv4 주소를 조회할 때 사용하는 레코드
예: 호스트 ns.cocudeny.shop의 IPv4 주소는 172.31.0.101
AAAA : 호스트 이름으로 IPv6 주소를 조회할 때 사용하는 레코드
예: jprs.jp의 IPv6 주소는
PTR : IP 주소로 호스트 이름을 조회할 때 사용하는 레코드
예: 172.31.0.130의 호스트 이름은 ns.cocudeny.shop
NS : DNS 서버의 호스트 이름 혹은 IP 주소를 저장하는 레코드
예: cocudeny.shop의 DNS 서버는 ns.cocudeny.shop
MX : 메일 서버 호스트 이름 혹은 IP 주소를 저장하는 레코드
예: cocudeny.shop의 메일 서버는 mail.cocudeny.shop
(메일 교환기, 메일서버를 구축할 때 사용한다.)
CNAME: 호스트 이름의 별칭을 저장하는 레코드
예: www.cocudeny.shop은 ns.cocudeny.shop의 별칭
(도메인을 도메인[별칭, alias]으로 바꿔준다.)



HAproxy (High Availablity, 고 가용성) - AWS ELB

  • HAProxy는 여러 서버에 요청을 분산시키는 TCP 및 HTTP 기반 애플리케이션을 위한 고가용성 로드 밸런서 및 역방향 프록시를 제공하는 무료 오픈 소스 소프트웨어 입니다.
  • C로 작성되었으며 빠르고 효율적(프로세서 및 메모리 사용 측면에서)으로 유명합니다.
  • 가용성 : 한 서버에 공격, 부하 등 문제가 생겨 다운되도, 서비스를 계속 이어나갈 수 있는 능력

HAproxy 설치

  • yum install -y haproxy : HAproxy설치
  • vi /etc/haproxy/haproxy.cfg
global
    daemon

defaults
    mode               http

frontend  http-in
    bind *:80
    default_backend    backend_servers # 여기서 frontend와 backend를 연결해준다.

backend backend_servers # 앞 backend는 frontend와 backend를 구별해주는 부분이고, backend_server는 정의하는 이름이다.
    balance            roundrobin # balance에서 쓰이는  roundrobin 은 실습용이고, 실무용은 아니다. 그 이유는 한쪽이 쏠려도 똑같이 주기 때문이다. 바쁜 서버에게 적게주고 여유서버에게는 많이주는 다른 방식이 있다.
    cookie  SVID insert indirect nocache maxlife 3m #3분 고정세션 (stickiness), s(초) 단위로도 줄 수 있다.
    server             web01 172.31.0.102:80 cookie check  # 한 작업이 너무 왔다갔다하지 않게, 처음 온 작업에겐 쿠키를 주어 일정시간 똑같은 서버에게 오게한다.
    server             web02 172.31.0.100:80 cookie check
  • systemctl restart haproxy : 설정을 바꿨으니 리스타트 해준다.
  • systemctl enable --now haproxy : 시작할때 자동시작에 등록한다.
  • 이제 서버를 테스트하기위해 두가지 web을 시작한다.

WEB01_SAMBA(172.31.0.102), WEB02_NFS(172.31.0.100)

  • 설정
    • 어댑터 1: 내부 네트워크
  • mobaXterm에서 Multi exce에 들어간 후, NAT와 NS서버는 Exclude에 체크해준다.
  • yum install -y httpd : httpd설치
  • systemctl enable --now httpd

  • firewall-cmd --permanent --add-service=http : 방화벽에 HTTP등록
  • firewall-cmd --reload : 방화벽 설정 후 새로고침
  • cd /var/www/html/
  • mkdir images
  • cd imaegs
  • yum install wget -y : 웹쉐어에서 이미지를 얻기 위해 wget설치
  • wget http://192.168.0.63/Files/two-rabbit.jpg : 웹쉐어 이미지 얻기
  • cd ..
  • vi index.html : index 작성한다. 서버 메모장에 위쪽에 있다.

접속이 안됨....

  • 위에 방화벽 연것은 WEB01과 WEB02의 방화벽을 연것이고, NAT서버의 방화벽은 열지 않았다.
  • NAT에서 방화벽에 등록하고 reload한다.
  • 그리고 NAT IP주소로 접속해본다.

WEB01_SAMBA

  • SAMBA 설치
  • yum install -y samba : samba 설치
  • mkdir -p /var/samba/share : samba폴더가 없지만, -p옵션으로 없는 폴더 만들면서 그 안에 폴더까지 만듬
  • chmod 777 /var/samba/share : 공유용 폴더기 때문에 777 권한을 부여한다.
  • adduser kosa, passwd kosa : kosa계정을 만들고 비밀번호를 설정한다
    - PW : kosa0401
  • smbpasswd -a kosa : smb(samba) 패스워드 다시 생성

  • vi /etc/samba/smb.conf : smb.conf설정
workgroup = 네트워크2 #Global에 넣어준다.

[share] # 맨 아래에 넣어준다.
        comment = Share Directory
        path = /var/samba/share
        browserable = yes
        writable = yes
        valid users = kosa
        create mask = 0777
        directory mask = 0777
  • smb와 nmb를 enable --now해서 시작과 시작프로그램에 등록해준다.
  • systemctl enable --now smb
  • systemctl enable --now nmb
  • firewall-cmd --permanent --add-servie=samba
  • firewall-cmd --permanent --add-service=samba
  • firewall-cmd --reload


    smb, nmb port 확인
  • ss -ant : port확인
  • 139와 445라고 추정한다.
  • smb, nmb라 그런지 두개의 port를 사용한다.

NAT에서 samba를 위한 포워딩 설정

  • firewall-cmd --permanent --zone=external --add-forward-port=port=139:proto=tcp:toport=139:toaddr=172.31.0.102
  • firewall-cmd --permanent --zone=external --add-forward-port=port=445:proto=tcp:toport=445:toaddr=172.31.0.102
  • firewall-cmd --reload
  • firewall-cmd --list-all --zone=external : 포트 들어갔는지 확인

복습

실습

profile
Talking Potato

0개의 댓글