TIL 08. 서버 네트워크 기본

이번 장에서는 서버 내부의 설정 중 윈도와 리눅스 서버에서 네트워크를 각각 어떻게 설정하고 현재 네트워크 상태를 어떻게 확인할 수 있는지가 주관점이다.



1. 서버의 네트워크 설정 및 확인 (OS 별로 정리)

1) 리눅스 서버 네트워크

(1) CentOS의 네트워크 설정
  • CentOS의 네트워크 설정 파일은 다음 경로에 존재한다.

    /etc/sysconfig/network-scripts
    CentOS_network-scripts

  • 네트워크 인터페이스 별로 설정 가능한 사항이 파일에 기록되어 있으며, 주요 항목은 다음과 같다. 주요 항목 이외에도 설정할 수 있는 다양한 항목들이 존재한다.
CentOS의 인터페이스 설정 시 주요 항목
ONBOOT 부팅 시 인터페이스를 활성화시킬 것인지 결정(yes / no)
BOOTPROTO 부팅 시 사용할 프로토콜 (none, dhcp, static)
IPADDR IP 주소
NETMASK 서브넷 마스크
예) 255.255.255.0
PREFIX 서브넷 마스크(비트 값으로 표기)
예) 24
GATEWAY 게이트웨이 주소
DNS1 주 DNS 정보 입력
DNS2 보조 DNS
CentOS_NIC
  • CentOS뿐만이 아닌 대부분의 Linux 계열 OS에서는 인터페이스 설정 파일을 수정하더라도 변경한 값이 즉시 적용되지 않는다. 변경된 설정값을 적용하려면 다음 두 가지 방법 중 하나를 수행해야 한다.

    1. 네트워크 서비스 재시작

      systemctl restart network.service

    2. 특정 인터페이스 재시작(ifup)과 다운(ifdown)

      ifup ifcfg-eht0
      ifdown ifcfg-eth0

* ifconfig (Linux) & ipconfig (Window)
  • Linux에선 ifconfig, Window에서는 ipconfig로 각각 네트워크 인터페이스의 설정값과 상태를 확인할 수 있다. 다만 차이점은 Linux의 ifconfig에선 활성화된 인터페이스 정보만 확인할 수 있다는 점이다. Linux에선 위 1-1)에서 다룬 인터페이스 다운으로 비활성화 시켜둔 인터페이스는 ifconfig를 통해 드러나지 않는다. Window에선 비활성화된 인터페이스까지 포함해 모든 인터페이스 정보가 보여지게 된다. ifdown후의 ifconfig 차이점

​ 위의 예시는 ifcfg-enp0s8 인터페이스를 다운시킨 후, ifconfig를 통한 정보 확인 과정이다. 기존에 출력하던 ip 주소, netmask 등의 정보가 표기되지 않는 것을 확인할 수 있다.


(2) 우분투 서버 네트워크
  • 우분투 네트워크 설정 파일은 다음 경로에 존재한다.

    /etc/network/interfaces
  • CentOS와의 차이점은 CentOS에서는 네트워크 인터페이스 별로 관련 파일과 디렉터리가 존재하지만, 우분투는 interfaces 설정 파일에 네트워크의 모든 인터페이스 설정이 들어간다는 점이다.

  • 각 설정에 필요한 속성 값은 거의 CentOS와 비슷하고 이름만 조금 다르다는 특징이 있다. 네트워크 시작 / 정지 / 재시작을 위한 명령어의 차이가 있다.

    /etc/init.d/networking start
    /etc/init.d/networking stop
    /etc/init.d/networking reload
    /etc/init.d/networking restart
    /etc/init.d/networking force-reload

2) 윈도우 서버 네트워크

  • 윈도우에서의 네트워크 설정은 여러 가지 방법으로 할 수 있다.

    1-1) 네트워크 연결 메뉴 사용

    1. 제어판네트워크 및 인터넷네트워크 연결 또는 아래 이미지와 같이 ncpa.cpl을 실행해 바로 네트워크 연결로 이동하는 방법도 있다.

    ncpacpl

    1. 네트워크 연결 메뉴에서 특정 네트워크 어댑터를 설정하려면 우클릭해 속성에 들어간다. 그리고 여러 가지 서비스 중 Internet Protocol Version 4(TCP/IPv4) 속성을 선택하면 해당 어댑터에서 사용할 IP 주소, 서브넷, 게이트웨이, DNS 정보를 설정할 수 있다. 보통의 가정집에서는 자동으로 설정해 사용하는 경우가 대부분이다.

      속성창


    1-2) netsh 명령어 사용

    1. Linux에서의 명령어를 사용한 네트워크 설정과 유사하게 netsh라는 명령어를 사용할 수 있다.

      netsh interface ipv4 set address name="인터페이스명" static IP 주소 서브넷 게이트웨이

    리눅스와 달리 윈도우는 설정 완료 후 ‘확인’ 버튼만 클릭하면 변경한 설정이 적용된다. Linux 계열의 OS처럼 별도로 네트워크 서비스나 인터페이스를 재시작하지 않아도 되지만, 간혹 정상적으로 동작하지 않아 재시작해야하는 경우에는 재시작할 어댑터를 사용 안 함사용 을 통해 재시작하면 된다.

    윈도우 네트워크 재시작

    아니면 netst 명령으로도 어댑터를 리셋 가능하다.

    netsh interface set interface name="인터페이스명" admin=disabled   #(비활성화)
    netsh interface set interface name="인터페이스명" admin=enabled    #(활성화)


2. 서버의 라우팅 테이블

이번 단원에서는 서버의 라우팅 동작을 이해하기 위한 라우팅 테이블 확인 방법에 초점을 둔다.

이번에 살펴볼 항목들은 아래와 같다.

  1. 목적지 (Destination)
  2. 서브넷 (Genmask)
  3. 게이트웨이 (Gateway)
  4. 인터페이스 (face)
  5. 우선순위 (Metric)

1. 라우팅 테이블 출력 시 출력 항목

서버 라우팅 테이블 항목
10.10.20.0 24 10.10.10.1 eth1 10
목적지 서브넷 게이트웨이 인터페이스 우선순위
  • 어떤 OS에서 출력을 하든 차이점은 순서만 차이날 뿐, 위의 항목들이 대부분 출력된다.
라우팅 테이블 항목 부가 설명
1. 목적지와 서브넷 서버가 통신하려는 목적지 IP 주소에 맞는 라우팅을 선택하는 기준점.
라우팅할 때 목적지 네트워크 주소와 서브넷으로 표현되는 목적지 네트워크 범위 내에 서버가 통신하려는 IP 주소가 속한 라우팅 테이블을 선택하게 된다.
2. 게이트웨이 선택된 목적지로 가기 위해 서버에서 선택하는 넥스트 홉.
만약 서버에 두 개 이상의 네트워크 카드(NIC)가 존재한다면 원하는 네트워크 카드의 게이트웨이로 지정해 주어야 한다.
3. 인터페이스 서버의 네트워크 카드를 의미하며, 라우팅에서 어떤 물리적인 경로로 패킷을 내보낼지 설정한다.
4. 우선순위 동일한 라우팅 테이블이 두 개 이상 존재할 때 어떤 라우팅 테이블을 선택할지 정하는 값이다. 이 값이 낮을 수록 우선순위가 높아진다.

2. 리눅스 서버의 라우팅 확인 및 관리

1. 라우팅 테이블 확인
  1. ip route

    • ip route 명령어를 사용한 결괏값은 다음과 같다.

    image-20220804094620919


  1. netstat -r

    • netstat을 사용해 확인할 땐 r 옵션을 추가하면 라우팅 테이블을 편하게 확인할 수 있다.

    netstat -r

    • n 옵션을 추가로 사용하면 화면에 표기될 때, 실제 IP 정보가 표기되어 좀 더 직관적인 라우팅 테이블을 확인할 수 있다.

    netstat -rn


2. 라우팅 테이블 추가하는 설정
  1. 임시적 라우팅 테이블 추가

    1. route add / del (추가 / 삭제)

      route add { -host | -net } Target[/prefix] [gw GW] [metric M] [[dev] If]   # 추가
      route del { -host | -net } Target[/prefix] [gw GW] [metric M] [[dev] If]   # 삭제
    2. 이 명령어 뿐만 아니라 ip route 옵션 뒤에 add 옵션을 사용하는 것도 동일하게 추가할 수 있다.

    3. 디폴트 라우팅 설정 - 일반 라우팅 설정과 동일하지만 목적지 네트워크를 default로 표기해 설정할 수 있다.

      route add default gw 10.1.1.1 dev eth0   # 추가
      route del default gw 10.1.1.1 dev eth0   # 추가
    • 위의 명령어로 추가한 라우팅 설정은 서버가 재부팅될 시 사라진다. 즉, 재부팅 시 초기 라우팅 설정만 남아있게 되는 특징이 있다.

  1. 영구적 라우팅 설정
1) Cent OS의 영구적 라우팅 설정
  • CentOS에선 다음과 같이 별도 파일을 만들어 라우팅을 설정한다.

    /etc/sysconfig/network-scripts/route-장치명
  • 예를 들어 et0 인터페이스에 대한 영구적인 라우팅 설정 파일명은 route-eht0이다.

  • 라우팅 설정 파일에는 ADDRESS, NETMASK, GATEWAY 항목을 사용한다.

    ADDRESS0=10.10.10.0
    NETMASK0=255.255.255.0
    GATEWAY0=10.1.1.1
    ADDRESS1=10.10.20.0
    NETMASK1=255.255.255.128
    GATEWAY1=10.1.1.1
    
    # 또는 아래와 같이 설정
    10.10.10.0/24 via 192.168.0.1 dev eth1

2) 우분투의 영구적 라우팅 설정
  • 우분투에서는 네트워크 설정에서 사용했던 interfaces 파일에 라우팅 설정을 한다. 일반 라우팅 테이블 설정과 동일한 양식으로 한다.

    up route add [-net|-host] <host/net>/<mask> gw <host/IP> dev <Interface>
    • 위 명령어 맨 앞의 up은 인터페이스가 시작될 때 실행하라는 명령어로, CentOS와 마찬가지로 네트워크를 다시 시작하거나 서버를 재부팅하는 경우, 신규 라우팅 정보가 라우팅 테이블에 등록된다.

3) 윈도우 서버의 라우팅 설정
  • 윈도우에서는 라우팅 테이블을 확인하고 관리하기 위해 route명령어를 사용한다. 4가지 옵션이 존재한다.
    1. PRINT
    2. ADD
    3. DELETE
    4. CHANGE

  1. PRINT

    • 옵션 없이 route print를 입력할 경우, 모든 인터페이스 목록을 확인할 수 있다.

    route print


    • 필요한 라우팅 정보만 확인하기 위해 특정 목적지 네트워크를 인자값으로 직접 지정하거나 *?를 이용해 특정 패턴에 맞는 네트워크 대역을 확인할 수 있다.

      route print 10.10.*		# 10.10.0.0/16 에 대한 전체 라우팅 테이블 확인
      route print 10.10.1?.0	# 10.10.10.0/24 ~ 10.10.19.0/24 에 대한 라우팅 테이블 확인

  2. ADD

    • 라우팅 테이블을 추가하는 명령어다. 다만, 리눅스처럼 명령으로 입력해 생성한 라우팅 테이블서버가 재부팅된 이후에는 라우팅 테이블에서 사라진다는 특징이 있다.

      ROUTE [ -p ] ADD [ dest ] [ MASK netmask ] [ gateway ] [ METRIC metric ] [ IF interface ]
    • 생성 시, -p 옵션을 추가해 생성하면 영구 경로로 등록할 수 있다. 즉, 리눅스처럼 설정 파일을 별도로 만들거나 입력하지 않고도 영구 경로 생성이 가능하다는 것이다.


  3. DELETE

    • 라우팅 테이블을 삭제하는 명령어다. 추가와 달리 MASKgateway 정보를 입력하지 않아도 된다.
    • 단, 세부 정보를 입력하지 않고 삭제할 경우 유의할 점이 존재한다. 입력한 정보만으로 해당하는 정보가 2가지 이상 존재한다면 해당된 라우팅 테이블이 모두 삭제된다.

  4. CHANGE

    • 라우팅 테이블을 변경하는 명령어다.
    • 삭제와 마찬가지로 세부 정보를 입력하지 않고 변경할 때 유의할 점이 존재한다. 입력한 정보 값에 해당되는 라우팅 테이블 정보가 모두 변경된다는 점이다.


3. 네트워크 확인을 위한 명령어

1) ping (Packet InterNet Groper)

  • 네트워크 상태를 확인할 때 사용하는 명령어다.
  • ICMP (Internet Control Message Protocol) 프로토콜을 사용하고 ICMP의 제어 메시지를 통해 여러 가지 네트워크 상태를 파악할 수 있다.
ping [옵션] 목적지_IP 주소
  • 별도 옵션 없이 ping을 체크하는 방법을 통상적인 기본 ping이라 하며, 옵션을 사용해 ping을 체크하는 방법을 확장 ping이라 한다.

(1) 리눅스 ping 옵션
리눅스 ping 명령어 옵션
-c
count
ping을 보내는 패킷(ECHO_REQUEST)을 몇 번 보내고 종료할 것인지를 지정
-i
interval
패킷을 보내는 시간 간격. 기본 설정값은 1초. 슈퍼 유저의 경우, 0.2 이하로 설정 가능
-I
interface
패킷을 보낼 때, 출발지 주소를 지정. 실제 IP 값을 지정하거나 인터페이스 이름을 지정하면 출발지 주소가 변경됨. 이 옵션을 사용하지 않는 경우, 라우팅 테이블에 의해 나가는 인터페이스(Outgoint-Interface)의 IP 주소가 출발지 주소가 됨.
-s
packetsize
패킷 크기를 지정. 기본 설정값은 56바이트(8바이트의 ICMP 헤더가 추가로 붙어 64바이트를 송신)

(2) 윈도우 ping 옵션
윈도우 ping 명령어 옵션
-n
count
ping을 보내는 패킷(ECHO_REQUEST)을 몇 번 보내고 종료할 것인지를 지정
기본 설정은 4회 전송
-t 중지할 때까지 지정한 호스트로 ping을 지속적으로 전송
-S
srcaddr
사용할 원본 IP 주소로, 리눅스의 -I 옵션과 동일
-l
size
패킷 크기를 지정. 기본 설정값은 32바이트
-r
count
count 홉의 경로 기록(최대 9홉까지 설정 가능)

2) netstat (network statistics)

  • 서버의 다양한 네트워크 상태를 확인할 때 사용하는 명령어다. 주로, 현재 서버의 서비스 포트 상태를 확인하는 용도로 사용한다. 윈도우 계열과 리눅스 계열에서의 기본적인 사용법은 동일하며, 일부 옵션만 차이가 있다.
  • 개인적으로 netstat -antp | grep LISTENING 을 통해 상태를 확인하고자 많이 사용했다.
(1) 리눅스 netstat 옵션
리눅스 netstat 명령어 옵션
-a
--all
모든 연결과 수신 대기 포트 표시
-n
--numeric
주소와 포트 번호를 숫자 형식으로 표시 (예: http → 80 )
-r
--route
라우팅 테이블 표시
-i
--interfaces
인터페이스별 입출력 패킷 통계
-s
--statistics
네트워크에 통계 데이터 출력
-p
--programs
PID와 프로그램 이름 출력
-t
--tcp
TCP만 출력 (TCP, TCPv6)
-4 / -6 IPv4나 IPv6에 대해 출력

(2) 윈도우 netstat 옵션
윈도우 netstat 명령어 옵션
-a 모든 연결과 수신 대기 포트 표시
-n 주소와 포트 번호를 숫자 형식으로 표시 (예: http → 80 )
-r 라우팅 테이블 표시
-e 이더넷 통계를 표시. 이 옵션은 -s 옵션과 함께 사용 가능
-s 프로토콜별 통계를 표시. 기본적으로 IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP 및 UDPv6에 대한 통계를 표시한다.
-p 옵션을 사용해 기본값의 일부 집합에 대한 통계만 표시
-p
--proto
proto로 지정한 프로토콜의 연결을 표시.
proto는 TCP, UDP, TCPv6, UDPv6 중 하나로, -s 옵션과 함께 사용해 프로토콜별 통계를 표시할 경우, proto는 IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP 및 UDPv6 중 하나를 사용