네트워크 - 실습 3 (VMware)

jsbak·2023년 3월 6일
0

Cloud

목록 보기
4/59

VMware VirtualMachine 설치

설치 순서
CentOS7(XFCE 설치X)

구성도

VMware - NAT 세팅 ( 필수 아님, IP가 부족할 경우, Port Forwarding 이 필요한 경우 )

Edit ➡ Virtual Network Eiditor ➡ (우측 하단)Change Settings ➡ Type이 NAT인 것 선택
➡ Subnet IP (10.0.0.0), Subnet Mask(255.255.255.0) ➡ 우측 DHCP Settings
➡ Starting IP Address (10.0.0.128), Ending IP Address (10.0.0.254) 256 중 3개를 제외한 253 개중 254-128+1 개를 씀
➡ 확인 후 위에 NAT Settings 클릭 ➡ Gateway IP (10.0.0.2) ➡ (cf. Port Forwarding 보이고 있구) OK 클릭 ➡ Apply 클릭 ➡ OK 클릭

VMware - NAT 세팅

Create a New Virtual Machine

Create a New Virtual Machine 클릭 - Next 클릭 - 이미지 세팅 맨아래꺼 클릭, Next 클릭 - Linux 클릭, CentOS7 64bit 선택, Next 클릭

  • 'CentOS7_VMware' 이름 설정 후 Next - Store virtual disk as a single file 클릭, 128GB 설정 후 Next 클릭
  • Cusomize Hardware... 클릭 - New CD 후 Use ISO image file 체크 후 .iso 이미지 삽입 - USB Controller, SoundCard, Printer remove
  • close 클릭 - Finish 클릭

VMware 와 VirtualBox의 가상 LAN 차이

VMnet1 : Host-Only, VMnet8 : NAT LAN(VMware는 NAT를 위한 가상의 NAT가 따로 있다.), 10.0.0.1으로 WIN 10에 셋팅되어있음.
VMware 가 WIN 10 NAT을 관리 (HOST와 통신할 수 있도록 LAN이 지원된다.)

💥 누구한테 줄일이 있다면 NAT 기능으로 주는 것이 좋다!

Install CentOS7

Power On - 네트워크 활성화 - 타임존 설정 - I will configure partition 클릭 - Click here to create them automatically 클릭 - home 영역 삭제 후 '/' 영역에 합침

  • 큰 값 집어 넣고 다른 (swap) 영역 클릭 하면 최대 크기로 설정됨. Done 클릭 - Accept Change 클릭 - Begin Installation 클릭
  • root 패스워드 설정

깡통 기본설정

SELinux 끄기 설정 vi /etc/sysconfig/selinux (enforcing -> disabled; setenforce 0 바로 적용되는것도 같이 )
yum update -y
yum install -y bash-completion
스냅샷 찍고 (VM 클릭 - Snapshot - Take Snapshot)
내보내기 (File - Export to OVF... - .oaf => .ova 로 변경후 저장)

키도 할 수 있으면 미리 보내 놓는 것으루..

VM 복제

VM 우클릭 - Manage - Clone - Next - Next - Create a full clone 선택, Next - 이름설정(WEB02_NFS, ...) 후 마침

  • DNS_DB, NAT-GW_DHCP_HAProxy 도 클론

키 전달

ssh-copy-id -i KEY_PATH root@10.0.0.128

필요한 것들 설치

vi /etc/ssh/sshd_config
/PasswordAuthentication
PasswordAuthentication no

systemctl restart sshd

hostnamectl set-hostname web01(web02, ...)

httpd 설치
http 방화벽

wget 설치

SAMBA 설치

WEB02 도 설정!

NFS 서버 등

VMware - NAT-GW

NAT 설정

  • NAT-GW 네트워크 어댑터 ➡ NAT 에서 Bridged ➡ NIC 추가 ➡ 어댑터 2, LAN Segments 선택 후 LAN Segments... 클릭 ➡ Add 클릭, "vSwitch", OK 클릭 ➡ LAN Segments - vSwitch 로 변경





  • 나머지도 네트워크 어댑터를 NAT ➡ LAN Segments - 'vSwitch' 로 변경
    • LAN Segment 기능으로 'NAT Gateway' 구조 수행
  • NAT GW 가 제일 처음/마지막으로 켜고 꺼져야한다.
  • IP 할당이 늦으면 systemctl restart network
    • DHCP 가 할당하게 해야한다.
    • IP 할당이 안되면 ? 슈퍼네팅?
    • VMware네트워크 설정 변경
      • 서브넷을 24 ➡ 21로 변경 - 네트워크의 범위를 줄이고, host를 더 늘림
        • /24 -> /21 supernetting ( 호스트가 사용할 IP가 늘어난다. )
        • /24 -> /25 subnetting ( 네트워크가 분할 2개, /26 4개, /27 8개, ..., /32 256개-ip only: ip 1개를 의미)
      • 진짜 LAN 카드를 수동으로 세팅
        • 무선일 경우는 무선 LAN으로 설정
  • 위의 문제가 아니라 IP 부족 문제 였다.
    • Host의 범위를 늘려야한다.
    • VMware 상단의 Edit ➡ Virtual Network Editor... ➡ Change Settings ➡ Bridged to ➡ Automatic 에서 Realtek... 으로 변경 ➡ Apply ➡ OK


NAT-GW VM ens32 설정

\# vi /etc/sysconfig/network-scripts/ifcfg-ens32

#  네트워크 매니저는 네트워크의 기능이다. 
# CentOS 7 까지는 둘다 있는데 CentOS 8,9는 네트워크 매니저만 존재한다.
# ggdG: 전체 라인 지우기
## /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE=Ethernet
BOOTPROTO=none # dhcp 유동, none 수동/고정
NAME=ens32
DEVICE=ens32
ONBOOT=yes
IPADDR=192.168.0.46 # 💥 본인의 IP로 변경, 변경되면 안되니 하나 지정하는 것임...
NETMASK=255.255.248.0 # 💥 24(255) -> 21(248)
GATEWAY=192.168.0.1 # 💥 본인의 IP 대역대의 Gateway IP 로 설정
DNS1=8.8.8.8
DNS2=8.8.4.4

NAT-GW VM 내부 망 ens33 설정

  • 내부 IP 대역은 변경할 필요가 없다. (host 범위 변경 ❌)
    • /24, 255.255.255.0
\# vi /etc/sysconfig/network-scripts/ifcfg-ens33

# 자기 자신이 게이트웨이라 게이트웨이 설정이 없다. 
## /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=none
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=10.31.0.1
NETMASK=255.255.255.0

network 기능을 가지고 세팅 했기 때문에 network 서비스를 재시작(네트워크 매니저 X)

\# systemctl restart network

#  변경 확인
\# ip a  

방화벽 데몬의 상태 확인 (구. iptables)

  • 방화벽이지만 CentOS에서 NAT와 Port Forward의 기능을 수행
\# systemctl status firewalld 
\# firewall-cmd --get-active-zone

방화벽 설정으로 LAN 내부와 외부 나누기

  • firewall에서는 private, public으로 표현하지 않음.
  • connection.zone 존을 각각 외부/내부로 나누겠다.
    • Zone : 액세스를 요청하는 IP 주소를 기반으로 조직의 컴퓨터 및 장치에 대한 액세스를 허용하거나 제한하는 데 사용할 수 있는 구성 가능한 경계
# c 채인지, mod 변경, NIC 카드, 어떤 존인지
\# nmcli c mod ens32 connection.zone external
\# nmcli c mod ens33 connection.zone internal

변경 확인

\# firewall-cmd --get-active-zone 

리눅스 시스템 라우터로 설정

  • ip_forward
    • sysctl 명령으로 수행시 재부팅하면 변경이 취소되는 경우가 있음.
  • ip_forward : 라우팅
\# vi /etc/sysctl.conf
-----------------------------------------
net.ipv4.ip_forward=1
-----------------------------------------

# 재부팅 풀리는지 아닌지 확인
reboot

설정이 잘 되어있나 확인하기

# cat /proc/sys/net/ipv4/ip_forward

❗❓ nmcli

  • 💦 Linux Network Manager 를 제어하는 nmcli 명령어
  • network 상태를 볼 수 있는 명령어로 다양하게 활용할 수 있는 유용한 명령어
  • 사용법
    • nmcli [OPTIONS] OBJECT {COMMAND}
    • OBJECT 는 nmcli 로 실행할 action 을 의미
    • general, networking, radio 등의 OBJECT 가 있으며 축약해서 맨 앞자리 알파벳만 사용가능
      • nmcli con == nmcli c
        • mod : modify 변경
        • ens32 : nic/네트워크 장치
    • OBJECT 별 상세 옵션을 보려면 --help 옵션을 추가하고 실행
      [root@nat ~]# nmcli con mod --help
      Usage: nmcli connection modify { ARGUMENTS | help }
      \---------------------------------------------------------------------------------
      ARGUMENTS := \[id | uuid | path] <ID> ([+|-]<setting>.<property> <value>)+
      \---------------------------------------------------------------------------------
      Modify one or more properties of the connection profile.
      The profile is identified by its name, UUID or D-Bus path. For multi-valued
      properties you can use optional '+' or '-' prefix to the property name.
      The '+' sign allows appending items instead of overwriting the whole value.
      The '-' sign allows removing selected items instead of the whole value.
    • nmcli c mod ens32 connection.zone external : 네트워크 장비 "ens32"'connection''zone'속성 값(value)을 external 로 connection(c) modify(mod) 하겠다.
  • Firewalld Zone : [CentOS7] Firewalld 방화벽
    • Internal 존: 내부 네트워크를 위해 사용되고, 선택된 연결만을 접속 허용
    • External 존: 특별히 매스커레이딩 규칙이 적용되는 외부의 라우터를 위해 사용되며, 단지 애부로의 연결 요청 중에서 선택된 경결만을 허용
      • 마스커레이딩(masquerade): 로컬네트워크에 있는 컴퓨터가 방화벽 기능을 하는 리눅스 서버(또는 게이트웨이/프록시)를 통해서 외부로 데이터 등을 보내려고 할 때, 리눅스 서버가 그 컴퓨터를 '마스커레이딩'한다고 말한다.

DHCP 설정

설치

yum install dhcp -y

설정

\# vi /etc/dhcp/dhcpd.conf
-------------------------------------------------
# /etc/dhcp/dhcpd.conf 수정
ddns-update-style interim;
subnet 10.31.0.0 netmask 255.255.255.0 {
  # = 10.31.0.0/24
  option routers 10.31.0.1; 
  option subnet-mask 255.255.255.0;
  range dynamic-bootp 10.31.0.100 10.31.0.110; 
  option domain-name-servers 8.8.8.8, 8.8.4.4;
  default-lease-time 7200; 
  max-lease-time 86400;
}
-------------------------------------------------

dhcp 데몬 활성화

systemctl enable --now dhcpd

3개의 VM 실행 및 IP 확인

WEB01_SAMBA 10.31.0.100
WEB02_NFS 10.31.0.101
DNS_DATABASE 10.31.0.102

❗ Bastion Host ❗

  • 요새
  • 침입 차단 소프트웨어가 설치되어 내부와 외부 네트워크 사이에서 일종의 게이트 역할을 수행하는 호스트
  • 포트가 열려 있는게 좋지 않다. 따라서 bastion host (경유지)를 이용

NAT의 라우팅 테이블

ip route

NAT-GW 호스트에 : id_rsa privatekey 업로드

NS 서버 설치 및 설정

설치

# yum -y install bind bind-chroot bind-utils

/etc/named.conf 파일

cp /etc/named.conf /etc/named.conf.bak

\# vi /etc/named.conf
----------------------------------------------------------
options {
	# /21, 21 비트이다!
        listen-on port 53 { 127.0.0.1; 192.168.0/21; 10.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/21; 10.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/bakjisu2.shop.zones"; # 호스팅 영역 생성
};
----------------------------------------------------------

zones 파일 설정

\# vi /var/named/bakjisu2.shop.zones
----------------------------------------------------------
zone "bakjisu2.shop" IN {
        type master; 
        file "bakjisu2.shop.db";
        allow-update { none; };
};

zone "0.31.10.in-addr.arpa" IN {
        type master;
        file "0.31.10.in-addr.arpa.db";
        allow-update { none; };
};
----------------------------------------------------------

bakjisu2.shop.db

\# vi /var/named/bakjisu2.shop.db
----------------------------------------------------------
$TTL    86400
@       IN      SOA     bakjisu2.shop.   root.bakjisu2.shop.(
                        2022041401 ; Serial
                        3h         ; Refresh
                        1h         ; Retry
                        1w         ; Expire
                        1h )       ; Minimum

        IN      NS      ns.bakjisu2.shop.
        IN      MX 10   ns.bakjisu2.shop.
        
ns      IN      A       10.31.0.102
web01   IN      A       10.31.0.100
web02   IN      A       10.31.0.101
----------------------------------------------------------

0.31.10.in-addr.arpa.db

  • dn look up
  • 전과 달리 web01, web02 리버스도 넣어줌
# IP가 역순이다
\# vi /var/named/0.31.10.in-addr.arpa.db
----------------------------------------------------------
$TTL	86400
@	IN	SOA	bakjisu2.shop.	root.bakjisu2.shop.(
			2022041401 ; Serial
			3h         ; Refresh
			1h         ; Retry
			1w         ; Expire
                        1h )       ; Minimum

	IN	NS	ns.bakjisu2.shop.
102	IN	PTR	ns.bakjisu2.shop.
100 IN  PTR web01.bakjisu2.shop.
101 IN  PTR web02.bakjisu2.shop.
----------------------------------------------------------

NS 서비스 실행

  • 부팅 서비스 등록 및 방화벽 규칙 허용
\# systemctl start named && systemctl enable named
\# systemctl enable --now named

NAT-GW 의 dhcp파일 수정

  • 첫번째로 나의 DNS 서버 배포
    • vi /etc/dhcp/dhcpd.conf 후 option domain-name-servers 맨 앞에 10.31.0.102 추가
    • dhcp 재시작: systemctl restart dhcpd

NS 서버 설정 - 방화벽 허용

\# firewall-cmd --permanent --add-service=dns
\# firewall-cmd --reload

도메인 정보 변경 확인

# 도메인 정보
\# cat /etc/resolv.conf 

# 각각의 VM HOST에 실행, MobaXterm의 MultiExec을 이용해도 된다. (정 중앙)
\# systemctl restart NetworkManager
# Ubuntu 에서의 명령어
$ sudo systemctl restart networking
# Windows Server - PowerShell/CMD
> ipconfig /renew
  


# 도메인 정보 변경 확인
\# cat /etc/resolv.conf 

NAT-GW 는 도메인 서버를 수동으로 설정해야한다.

포워드 서버를 통해 인터넷 밖으로 나갈수 있다.

# DNS1=내부_도메인_서버_IP, 
\# vi /etc/sysconfig/network-scripts/ifcfg-ens32

\# systemctl restart NetworkManager

# nameserver 서버 정보 확인하기
\# cat /etc/resolv.conf
\# ping web01.bakjisu2.shop

HAProxy

  • NAT-GW 에 설치
\# yum install -y haproxy
\# cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
\# vi /etc/haproxy/haproxy.cfg
----------------------------------------------------------
global	
    daemon	

defaults
    mode               http

frontend  http-in
    bind *:80
    acl firefox hdr_sub(User-Agent) Firefox
    acl chrome hdr_sub(User-Agent) Chrome
    default_backend    backend_servers
    use_backend bk_firefox if firefox
    use_backend bk_chrome if chrome

# 서버를 그룹으로 묶어서 우리는 2개 web03(X)
backend backend_servers
    balance            roundrobin
#    cookie  SVID insert indirect nocache maxlife 10s
    server             web01 10.31.0.100:80 cookie w1 check
    server             web02 10.31.0.101:80 cookie w2 check
#    server             web03 10.31.0.103:80 cookie w3 check

backend bk_firefox
    server             web01 10.31.0.100:80
backend bk_chrome
    server             web02 10.31.0.101:80
----------------------------------------------------------

서비스 활성화 및 시작 서비스 등록

  • 외부 서비스로 방화벽이 열려 있지 않음..
\# systemctl enable --now haproxy

# 192.168.0.126, NAT-GW의 80번포트 접속시, 안됨...

\# ss -ant # *:80 포트 번호 확인됨

# 열린 것 확인
\# firewall-cmd --list-all --zone=external

NAT-GW 방화벽 허용이 안되어 있어 규칙 설정

  • 외부에서 접속하는 80 번 포트 오픈
# NAT-GW는 내부/외부 구분되어있어서 외부라고 꼭 넣어주기
\# firewall-cmd --permanent --add-port=80/tcp --zone=external
\# firewall-cmd --reload

# 192.168.0.46 접속!
  • SAMBA 같은 친구들도 포워딩 또는 haproxy 활성화 등을 해두자

참고

  • 서로 다른 VM 간 통신?
      1. 같은 게이트 웨이 안에 속하고, IP 대역대, NET마스크를 동일하게 설정하면 가능
      • 포워딩만 해줘도 들어가진다.
        • DB 서버 접속 하는 법 firewall-cmd --permanent --zone=external --add-forward-port=port=3306:proto=tcp:toport=3306:toaddr=10.31.0.102
      1. Proxy를 이용한 분배? 어떻게?? 처리
profile
끄적끄적 쓰는곳

0개의 댓글