Understanding your Network and its Configuration

froajnzd·2024년 11월 20일
0

how linux works

목록 보기
8/8
post-thumbnail

' How Linux Works, 3rd Edition ' Chapter 9의 내용

네트워킹은 컴퓨터를 연결하고 데이터를 주고받는 기술입니다.

  • 데이터를 보내는 컴퓨터는 데이터를 어디로 보내야 할지 어떻게 알까?
  • 데이터를 받은 컴퓨터는 받은 데이터가 무엇인지 어떻게 알까?

이 질문에 답하기 위해 컴퓨터는 여러 가지 구성 요소를 사용한다.
이 구성 요소들은 각각 데이터 보내기, 받기, 또는 데이터를 구분하는 역할을 담당하며,
이를 그룹으로 묶어 네트워크 계층이라는 시스템을 만든다.
각 계층은 독립적으로 작동하기 때문에 다양한 방식으로 네트워크를 구성할 수 있다.
하지만 이렇게 다양한 옵션이 있다 보니 네트워크 설정이 복잡해질 수 있다.

그래서 이 글은 먼저 간단한 네트워크 구조와 그 계층들에 대해 설명합니다.
또, 네트워크 설정을 확인하는 방법과, 각 계층이 어떻게 작동하는지, 그것을 직접 설정하는 방법을 익힌다.

끝으로, 네트워크를 직접 구축하거나 방화벽을 설정하는 방법을 기술한다.

1. Network Basics

네트워크 기본

인터넷을 지원하는 라우터와 일반적인 LAN

그림은 인터넷을 지원하는 라우터와 일반적인 LAN(근거리 통신망)을 나타낸 것이다

네트워크에 연결된 각각의 컴퓨터는 호스트(Host)라고 부른다. 그림에서는 Host A, Host B, Host C, 그리고 라우터가 네트워크에 연결된 호스트들이다.
이들은 하나의 로컬 네트워크(LAN)를 형성한다. LAN은 유선 또는 무선으로 연결될 수 있다. 엄격한 LAN의 정의는 없지만, 보통 물리적으로 가까운 위치에 있고 비슷한 설정과 접근 권한을 공유하는 컴퓨터들이다.

라우터는 특별한 호스트로, 데이터를 한 네트워크에서 다른 네트워크로 이동시키는 역할을 한다.
라우터는 LAN에 연결되어 있을 뿐 아니라 인터넷(그림의 구름 모양)에도 연결되어 있다.
이 연결을 업링크(Uplink) 또는 WAN 연결이라고 부른다. WAN은 LAN보다 훨씬 더 큰 네트워크를 의미한다.
라우터가 LAN과 인터넷을 연결해주기 때문에 LAN에 있는 모든 컴퓨터가 라우터를 통해 인터넷에 접속할 수 있다.

이 챕터에선 라우터가 이런 인터넷 접근을 어떻게 제공하는지 알아볼 것이다.

2. Packets

네트워크에서는 데이터를 패킷(Packet)이라는 작은 단위로 나누어 보낸다. 패킷은 두 부분으로 구성된다:

  • Header : 송신 호스트와 수신 호스트 정보, 사용하는 프로토콜 같은 식별 정보를 담고 있다.
  • Payload : 실제 데이터(예: HTML, 이미지 데이터 등)가 담겨 있다.

패킷은 순서와 상관없이 보내지고 처리될 수 있다. 여러 호스트가 동시에 통신할 수 있는 이유도 여기 있다. 예를 들어, 한 호스트가 두 개의 다른 호스트에 데이터를 보낼 때, 패킷을 번갈아 전송하면서 동시에 보낼 수 있다. 데이터를 패킷으로 나누는 방식은 전송 과정에서 오류를 발견하거나 수정하기 쉽게 만들어준다.

일반적으로, 패킷을 직접 다룰 필요는 없다. 운영 체제가 알아서 패킷과 애플리케이션 데이터를 변환해 주기 때문이다. 하지만 패킷이 네트워크 계층에서 어떤 역할을 하는지 이해해두면 도움이 된다.

3. Network Layers

네트워크는 여러 계층(layer)으로 구성된 구조를 가지고 있고, 이를 네트워크 스택(network stack)이라고 부른다. 모든 네트워크는 이런 스택을 기반으로 동작해. 일반적인 인터넷 네트워크는 아래와 같은 4개의 계층으로 나뉜다.

  • Application Layer 응용 계층
    사용자와 직접 상호작용하는 프로그램이나 서비스가 네트워크를 통해 데이터를 주고 받을 수 있는 프로토콜/규칙을 정의한다. 즉, 이 계층은 애플리케이션과 서버가 소통하는 언어를 정의한다. 주로 고수준 프로토콜을 사용한다
    - HTTP: 웹에서 데이터를 주고받는 데 사용.
    - TLS: 데이터 암호화를 위한 프로토콜.

    - FTP: 파일 전송을 위한 프로토콜.

    이 계층에서 동작하는 프로토콜들은 종종 결합되기도 한다. 예를 들어, HTTP에 TLS를 추가하면 HTTPS가 된다.
    애플리케이션 계층의 작업은 주로 사용자 공간(user space)에서 처리된다.

  • Transport Layer 전송 계층
    두 호스트 간 데이터가 신뢰성 있게 전달될 수 있도록 보장하는 역할을 한다. 즉, 애플리케이션 계층에서 생성된 데이터를 어떻게 전송할지 결정한다.

데이터의 무결성을 확인하거나,
데이터를 송신 측에서 패킷으로 나누고 수신 측에서 다시 합친다.
여기에는 TCP(신뢰성 있는 전송)와 UDP(빠른 전송) 같은 프로토콜이 포함된다.
리눅스에서는 전송 계층과 그 아래 계층들은 보통 커널에서 처리되지만, 일부 예외적으로 사용자 공간에서 처리되는 경우도 있다.

  • Network or internet Layer 네트워크 계층
    패킷을 출발지에서 목적지까지 어떻게 이동시킬지 정의한다.
    인터넷에서는 IP(Internet Protocol)가 이 역할을 담당한다.
    이 계층은 하드웨어와 독립적으로 설계되어, 한 호스트에서 여러 네트워크 계층(IPv4, IPv6 등)을 동시에 설정할 수 있다.

  • Physical Layer
    데이터를 실제 물리적 매체(예: 이더넷 케이블, 모뎀)를 통해 보내는 방법을 정의한다.
    이 계층을 링크 계층(Link Layer) 또는 호스트-네트워크 계층(Host-to-Network Layer)라고 부르기도 한다.

데이터를 주고받는 과정

데이터가 네트워크를 통해 이동할 땐, 이런 계층을 최소 두 번씩 거친다.
예를 들어, Host A에서 Host B로 데이터를 보낸다면,

Host A의 애플리케이션 계층에서 시작해 전송 계층 → 네트워크 계층 → 물리 계층 순서로 내려감.
물리적인 매체를 통해 데이터가 전달되면, Host B에서는 물리 계층 → 네트워크 계층 → 전송 계층 → 애플리케이션 계층 순서로 올라감.
라우터를 거쳐 인터넷으로 나가는 경우, 라우터에서도 일부 계층을 거쳐 데이터를 처리한다.

혼란스러운 점

계층 간 작업이 때로는 효율성을 위해 섞이기도 한다. 예를 들어, 물리 계층만 다루던 장비가 전송 계층 데이터까지 동시에 처리해서 데이터를 더 빠르게 필터링하거나 라우팅하기도 한다.
이름도 헷갈릴 때가 있다. 예를 들어 TLS(Transport Layer Security)는 이름 때문에 전송 계층에 있을 것 같지만, 실제로는 애플리케이션 계층에 있다.

4. The Internet Layer

인터넷 계층은 하드웨어나 운영 체제에 상관없이 인터넷 패킷을 주고받을 수 있는 소프트웨어 기반의 네트워크다. 즉, 어떤 하드웨어와 운영 체제를 사용하더라도 인터넷 패킷을 전송할 수 있다.
인터넷은 분산된 구조로 되어 있다. 여러 개의 서브넷이 서로 연결되어 하나의 큰 네트워크를 형성한다.

host는 1개 이상의 서브넷에 연결될 수 있다.
한 서브넷에서 다른 서브넷으로 데이터를 전송할 수 있다면 그런 종류의 호스트를 라우터(gateway)라고 한다

그림은 LAN을 서브넷으로 식별하고 각 호스트와 라우터의 인터넷 주소를 식별한다.
그림의 라우터에는 로컬 서브넷 10.23.2.1과 인터넷 링크라는 두 개의 주소가 있다(인터넷 링크 주소는 현재 중요하지 않으므로 uplink 주소라고만 표시된다).
각 인터넷 호스트는 적어도 하나의 숫자 IP 주소를 가지고 있다. IPv4의 경우, 10.23.2.37과 같은 a.b.c.d의 형태다.
이 표기법의 주소는 dotted-quad라고도 불린다.
호스트가 여러 서브넷에 연결된 경우, 서브넷당 적어도 하나의 IP 주소가 있다.
각 호스트의 IP 주소는 전체 인터넷에서 고유해야 하지만, 나중에 보시겠지만, 사설망과 네트워크 주소 변환(NAT)은 이를 약간 혼란스럽게 만들 수 있다.

4.1 Viewing IP Addresses

한 기계는 여러 물리 인터페이스, 가상 인터넷 네트워크... 등등 많은 IP주소를 가질 수 있다.

주소 뒤의 /24 는 ip주소가 포함한 서브넷을 정의한다.

4.2 Subnets

subnet은 ip 주소 범위가 같은 그룹

subnet은 두 가지 정보로 정의된다

  • network prefix (routing prefix)
    서브넷 내에서 공통된 부분을 나타낸다
  • subnet mask (network mask 또는 routing mask)
    네트워크와 호스트를 구분하는 역할을 한다

4.3 Common Subnet Masks and CIDR Notation

CIDR (Classless Inter-Domain Routing) 표기법
: 네트워크 주소와 서브넷 마스크를 간단하게 표기하는 방법

5. Routes and the Kernel Routing Table

인터넷 서브넷을 연결하는 것은 여러 네트워크를 연결해 데이터를 주고받는 것이라고 보면 된다.

서브넷 안에서는 직접 통신이 가능하다
예를 들어, Host A의 IP 주소가 10.23.2.4라고 할 때, 이 호스트는 같은 서브넷 10.23.2.0/24에 있는 다른 기기들과 바로 통신할 수 있다.

같은 서브넷 안: Host A ↔ 서브넷 안의 다른 호스트
다른 네트워크와 통신하려면 라우터 필요
인터넷의 다른 네트워크와 통신하려면 라우터(10.23.2.1)를 통해 데이터를 보내야 한다.

다른 네트워크: Host A ↔ 라우터 ↔ 인터넷

  • 첫 번째 줄

    	default via 192.168.64.1 dev enp0s1 proto dhcp src 192.168.64.2 metric 100
    1. default : 기본 경로. 로컬 서브넷 외 모든 트래픽에 적용됨

    2. via 192.168.64.1 : 이 데이터를 라우터로 보내라는 뜻

    3. dev enp0s1 : 라우터로 보내는 데이터도 같은 네트워크 인터페이스를 사용한다

      즉, 외부 네트워크로 나가는 데이터는 라우터(10.23.2.1)로 보내라

  • 두번째 줄 (local subnet)

    	192.168.64.0/24 dev enp0s1 proto kernel scope link src 192.168.64.2 metric 100
       
    1. 192.168.64.0/24 : 목적지 네트워크

    2. dev enp0s1 : 목적지로 연결되는 인터페이스

      즉, 같은 서브넷(10.23.2.0/24) 안의 다른 컴퓨터로는 데이터를 직접 보낸다

route -n 으로도 라우팅 테이블을 볼 수 있는 방법이 있다.

-n 옵션을 달면 이름으로 보여지던 호스트/네트워크를 ip 주소로 보여달라고 하는 것이다! (netstat에서도 사용할 수 있음)

6. The Default Gateway

라우팅 테이블에서 default는 인터넷 상의 모든 주소와 일치한다. (0.0.0.0/0)

대부분의 네트워크 netmasksms /24(255.255.255.0)이다.
그리고 대게 라우터는 서브넷의 주소 1에 있다.
(예로, 10.23.2.0/24 면 라우터는 10.23.2.1)

커널은 어떻게 라우트 할까?
라우팅 테이블의 순서는 라우트 순서 (혹은 우선순위)와 상관이 없다.
커널은 서브넷 마스크가 매칭되는 라우트 중 가장 긴 라우트를 찾아 그곳으로 라우팅한다.

7. IPv6 addresses and Networks

IPv4는 32비트의 숫자 주소를 사용하므로 약 2^32 = 약 43억 개 주소를 사용할 수 있다.
ip가 충분하지 않은 문제로 인해 IPv6가 생겼다.

IPv6 주소 체계는 128비트를 가지고 있다.(32바이트)

2001:0db8:0a0b:12f0:0000:0000:0000:8b6e
2001:db8:a0b:12f0::8b6e

위의 주소는 같은 ip를 가리키고 있다.
연속된 0의 set는 콜론 두 개(::)로 표현할 수 있으며,
set 속의 맨 앞의 0은 생략가능하다.

IPv6 체계
보통 한 호스트가 두 가지 주소를 가진다.
1. Global Unicast Address

  • 인터넷에서 사용가능한 주소
  • 항상 2000::/3 으로 시작한다.
  1. Link-Local Address
  • 같은 로컬 네트워크 안에서만 통신하는 데 사용
  • 항상 fe80::/10으로 시작하고, 뒤에 추가 정보가 붙는다.
    - 네트워크 id는 전부 0이며, 마지막 64비트는 네트워크 인터페이스 ID로 채운다. (ex, fe80::1a2b:3c4d:5e6f:7g8h)

7.1 Viewing IPv6 Configuration on your system

IPv6의 정보를 보고싶다면 -6 옵션을 사용하면 된다.

7.2 Configuring Dual-Stack Networks

듀얼 스택 네트워크: IPv4와 IPv6를 동시에 실행할 수 있는 네트워크
(예를 들어, 컴퓨터나 서버가 IPv4 주소와 IPv6 주소를 동시에 가지며, 두 프로토콜을 모두 사용할 수 있는 상태.)

IPv4와 IPv6는 독립적으로 동작하며, 네트워크 계층의 규칙만 다르다
(컴퓨터가 IPv4 주소(192.168.1.1)와 IPv6 주소(fe80::1)를 동시에 가질 수 있다)

  • 어떤 프로토콜을 사용할 지는 애플리케이션(웹브라우저 등)이 결정

8. Basic ICMP and DNS Tools

이제 호스트와 상호 작용하는 데 도움이 되는 몇 가지 기본적인 실용적인 유틸리티를 살펴볼 때입니다.
두 가지 프로토콜을 사용합니다:

ICMP(Internet Control Message Protocol): 연결 및 라우팅 문제를 근절하는 데 도움이 될 수 있는 프로토콜(ICMP)
ICMP는 인터넷 네트워크를 구성하고 진단하는 데 사용되는 전송 계층 프로토콜이다. 실제 사용자 데이터를 전달하지 않고 그 위에 애플리케이션 계층이 없다는 점에서 다른 전송 계층 프로토콜과 다르다.

DNS(Domain Name Service): 많은 숫자를 기억할 필요가 없도록 IP 주소에 이름을 매핑하는 시스템.
ICMP에 비해 DNS는 사람이 읽을 수 있는 이름을 인터넷 주소에 매핑하는 데 사용되는 애플리케이션 계층 프로토콜이다.

8.1 ping

ping은 가장 기본적인 네트워크 디버깅 도구이다.
ICMP 요청 패킷을 보내서 수신자로부터 패킷을 요청한다.

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

8.8.8.8에게 56바이트의 패킷(헤더 포함 84바이트)을 보내고 있다.
default로 1초에 1패킷을 보낸다.

64 bytes from 8.8.8.8: icmp_seq=1 ttl=115 time=41.1 ms

64 bytes : 바이트 숫자. 패킷 사이즈+8을 반환
icmp_seq : 시퀀스넘버. 순서대로 도착해야 한다. 그렇지 않았다면 연결에 문제가 있는 것.
time : roud-trip-time. 1000ms 이상이 걸린다면 연결이 굉장히 느린 것.

-4, -6 옵션으로 IPv4, IPv6를 사용하게 강제할 수 있다.

만약, 몇 호스트에서 ping을 받는것을 실패할 수 있는데,
이 경우는 보안상의 이유로 호스트 서버에서 ICMP echo request packet에 응답하는 것을 막아둔 것이다.

8.2 DNS and host

도메인은 사람이 기억하기 쉽게 만든 이름으로, www.google.com 등이 있다. IP주소를 기억하지 않아도 도메인 이름으로 접속할 수 있다.

DNS(Domain Name System) : 도메인 이름 ↔ IP 주소를 자동으로 변환해주는 시스템 (변환 담당은 DNS 라이브러리)

  • host 명령어로 DNS 정보를 수동으로 확인하기
    IPv4, IPv6 주소를 확인할 수 있다.
  • ip 주소에서 도메인 이름 찾기
    ip 주소를 넣으면 해당 ip와 연결된 도메인 이름을 보여준다.
    but, 완전히 신뢰할 수 없다 ? -> 하나의 ip 주소에 여러 도메인 네임이 연결될 수 있으며, 시스템 관리자가 별도로 설정해야 작동하기 때문.

9. The Physical Layer and Ethernet

인터넷은 software 네트워크이다.
인터넷을 특정 하드웨어에 의존하지 않는다는 것이다. 어떤 컴퓨터, OS, 물리 네트워크에서도 동작할 수 있다는 점이 강점이다.
하지만, 실제로 다른 컴퓨터와 데이터를 주고받으려면 물리적인 연결(하드웨어)이 필요하다.
이 하드웨어 계층을 물리 계층(Physical Layer)이라고 부른다.

Ethernet(이더넷)은 가장 흔히 사용되는 물리 계층 네트워크다.

  • 유선 이더넷: 케이블로 연결.
  • 무선 이더넷: Wi-Fi.
    이더넷 네트워크는 IEEE 802 표준을 따른다
  1. MAC 주소(Media Access Control)
    • 이더넷 네트워크에 연결된 장치(컴퓨터, 프린터 등)마다 고유한 하드웨어 주소를 가진다
    • IP 주소와 독립적이고, 이더넷 네트워크 안에서만 고유하다(인터넷 전체에서는 중복 가능).
  2. frames (프레임)
    • 이더넷 네트워크에서 데이터는 프레임(Frame)이라는 단위로 전송
    • 데이터를 감싸는 포장지 역할.
      - 출발 MAC 주소 + 도착 MAC 주소 + 전송할 데이터

이더넷의 한계
이더넷은 한 네트워크(로컬 네트워크) 안에서만 동작한다.
두 개의 서로 다른 이더넷 네트워크가 있을 경우, 직접적으로 데이터를 주고받을 수 없다.

  • 이더넷 브리지(Ethernet Bridge)
    두 네트워크를 연결하려면 이더넷 브리지라는 장치를 사용해야 한다.
    하지만 이더넷 브리지가 없으면 서로 다른 네트워크 간 데이터 전송이 불가능하다.

라우터
이더넷 네트워크의 한계를 넘기 위해 사용된다
동작 1. 이더넷 프레임에서 데이터를 꺼낸다.
동작 2. 새로운 프레임에 데이터를 넣고, 다른 네트워크로 보낸다.
이렇게 라우터가 데이터를 재포장하여 네트워크를 넘긴다!

10. Understanding Kernel Network Interfaces

네트워크 인터페이스: 하드웨어(물리 계층)소프트웨어(인터넷 계층)를 연결하는 역할을 한다.

  • 하드웨어: 네트워크 장치(이더넷 카드, Wi-Fi 어댑터 등).
  • 소프트웨어: IP 주소, 서브넷 마스크, 라우팅 설정 등.
    네트워크 인터페이스를 설정하면 물리적 네트워크 장치에 IP 주소 같은 네트워크 설정이 연결된다.

인터페이스는 고유한 이름을 가지며, 이름은 사용 중인 하드웨어 종류를 나타낸다.

  • 예: enp0s31f6 → PCI 슬롯에 연결된 이더넷 장치.
  • 예전 이름: eth0 (첫 번째 이더넷 장치) 또는 wlan0 (무선 장치).
  • 요즘 이름: 예측 가능한 이름(Predictable Network Interface Name)
    - 시스템이 재부팅되어도 이름이 바뀌지 않는다

~ 추가로 ~
ip show로 소프트웨어 설정(인터넷 계층)을 확인하고 변경했다면,
ethtool로 하드웨어 정보 및 설정을 확인하고 변경할 수 있다.

11. Introduction to Network Interface Configuration

11.1 Manually Configuring Interfaces

수동으로 인터페이스를 설정할 수 있지만 요즘엔 netplan 도구를 활용한다.

11.2 Manually Adding and Deleting Routes

12. Boot-Activated Network Configuration

전통적인 네트워크 설정 방식
과거에는 네트워크를 설정하기 위해 수동으로 명령어(ip)를 실행하거나, 이를 부팅 시 자동으로 실행하도록 스크립트를 작성했다.

  • ifup/ifdown: 네트워크 인터페이스를 설정(ifup)하거나 해제(ifdown)하는 도구.
    • 부팅 시 스크립트에서 호출해 네트워크를 설정할 수 있었다.
    • 문제: Linux 배포판마다 구현 방식과 설정 파일이 달라 통일성이 없었다.

문제! 네트워크 설정의 복잡성
네트워크 설정은 여러 계층(물리 계층, 인터넷 계층 등)에 걸쳐 이루어진다.
이로 인해

  • 네트워크를 설정하는 소프트웨어가 커널, 사용자 공간 도구 등 여러 곳에 분산되어 있다.
  • 도구나 라이브러리마다 설정 파일 형식이 다르다.
  • 한 도구의 설정 변경이 다른 도구를 망가뜨릴 수 있어 설정 파일을 공유하지 않는다.

문제점

  • 네트워크 설정 파일과 도구가 여러 곳에 분산되어 있어 관리가 어렵다.
  • 배포판이나 시스템의 역할(데스크톱, 서버)에 따라 사용하는 도구가 다르다.
  • 예: 데스크톱에서 잘 작동하는 도구가 서버에는 적합하지 않을 수 있다.

Netplan의 등장
Netplan은 네트워크 설정 문제를 해결하기 위해 고안된 도구이다.

Netplan은 직접 네트워크를 관리하지 않는다.

  • 대신, 통합된 설정 파일 표준을 제공하고, 이를 기존 네트워크 관리자 도구에서 사용할 수 있도록 변환한다.

현재 Netplan은 NetworkManager와 systemd-networkd를 지원한다.

  • Netplan 설정 방식:
    • 설정 파일은 YAML 형식으로 작성된다.
    • 파일은 /etc/netplan 디렉터리에 저장된다.

13. Problems with manual and Boot-activated Network Configuration

14. Network Configuration managers

NetworkManager

  • 데스크톱/노트북에서 가장 널리 사용되는 네트워크 관리 도구.
  • 동적인 네트워크 설정(Wi-Fi, 유선 연결 전환)에 적합

systemd-networkd

  • 시스템 부팅 및 네트워크 설정을 간단하게 관리하는 systemd의 부가기능.
  • 서버와 같이 단순한 네트워크 설정이 필요한 시스템에 적합.

기타 도구들은 임베디드 시스템(OpenWRT의 netifd)과 Android(ConnectivityManager), 소형 시스템(ConnMan, Wicd) 등 특수 환경에서 사용.

14.1 NetworkManager Operation

14.2 NetworkManager Interaction

14.3 NetworkManager Configuration

15. Resolving Hostnames

15.1 /etc/hosts

15.2 resolv.conf

15.3 Caching and Zero-Configuration DNS

15.4 /etc/nsswitch.conf

16. Localhost

17. The Transport Layer: TCP, UDP, and Services

17.1 TCP Ports and Connections

17.2 UDP

18. Revisiting a Simple Local Network

19. Understanding DHCP

19.1 Linux DHCP Clients

19.2 Linux DHCP Servers

20. Automatic IPv6 Network Configuration

21. Configuring Linux as a Router

22. Private Network (IPv4)

23. Network Address Translation (IP Masquerading)

24. Routers and Linux

25. Firewalls

25.1 Linux Firewall Basics

25.2 Setting Firewall Rules

25.3 Firewall Strategies

26. Ethernet, IP, ARP, and NDP

27. Wireless Ethernet

27.1 iw

27.2 Wireless Security

Summary

profile
Hi I'm 열쯔엉

0개의 댓글