Skip to main content

Chapter 34. 고급 네트워킹

34.1. 요약

이 장에서는 여러 가지 고급 네트워킹 주제를 다룹니다.

이 장을 읽고 나면 다음 사항을 알게 될 것입니다:

  • 게이트웨이와 라우팅의 기본 사항.
  • USB 테더링을 설정하는 방법.
  • IEEE® 802.11 및 Bluetooth® 장치를 설정하는 방법.
  • FreeBSD가 브리지 역할을 하도록 하는 방법.
  • 네트워크 PXE 부팅을 설정하는 방법.
  • FreeBSD에서 공통 주소 중복 프로토콜(CARP)의 기능을 활성화하고 활용하는 방법.
  • FreeBSD에서 여러 VLAN을 구성하는 방법.
  • 블루투스 헤드셋 구성하기.

이 장을 읽기 전에 먼저 다음 사항을 이해해야 합니다:

  • /etc/rc 스크립트의 기본 사항을 이해합니다.
  • 기본적인 네트워크 용어를 숙지합니다.
  • FreeBSD의 기본 네트워크 구성을 이해합니다(FreeBSD 네트워크).
  • 새로운 FreeBSD 커널을 구성하고 설치하는 방법을 알 수 있습니다(FreeBSD 커널 구성하기).
  • 추가 서드파티 소프트웨어를 설치하는 방법을 알 수 있습니다(애플리케이션 설치하기: 패키지 및 포트).

34.2. 게이트웨이와 라우팅

라우팅은 한 시스템이 다른 시스템으로 가는 네트워크 경로를 찾을 수 있도록 하는 메커니즘입니다. 라우팅은 '목적지'와 '게이트웨이'를 나타내는 정의된 주소 쌍입니다. 경로는 지정된 목적지로 가려고 할 때 지정된 게이트웨이를 통해 패킷을 보내도록 지정합니다. 목적지에는 개별 호스트, 서브넷, "default"의 세 가지 유형이 있습니다. "default"는 다른 경로가 적용되지 않는 경우 사용됩니다. 또한 게이트웨이에는 개별 호스트, 인터페이스라고도 하는 링크, 이더넷 하드웨어(MAC) 주소의 세 가지 유형이 있습니다. 알려진 경로는 라우팅 테이블에 저장됩니다.

이 섹션에서는 라우팅 기본 사항에 대한 개요를 제공합니다. 그런 다음 FreeBSD 시스템을 라우터로 구성하는 방법을 시연하고 몇 가지 문제 해결 팁을 제공합니다.

34.2.1. 라우팅 기초

FreeBSD 시스템의 라우팅 테이블을 보려면 netstat(1)을 사용하세요:

% netstat -r
Routing tables

Internet:
Destination      Gateway            Flags     Refs     Use     Netif Expire
default          outside-gw         UGS        37      418       em0
localhost        localhost          UH          0      181       lo0
test0            0:e0:b5:36:cf:4f   UHLW        5    63288       re0     77
10.20.30.255     link#1             UHLW        1     2421
example.com      link#1             UC          0        0
host1            0:e0:a8:37:8:1e    UHLW        3     4601       lo0
host2            0:e0:a8:37:8:1e    UHLW        0        5       lo0 =>
host2.example.com link#1            UC          0        0
224              link#1             UC          0        0

이 예제의 항목은 다음과 같습니다:

default

이 표의 첫 번째 경로는 default 경로를 지정합니다. 로컬 시스템이 원격 호스트에 연결해야 할 때 라우팅 테이블을 확인하여 알려진 경로가 존재하는지 확인합니다. 원격 호스트가 테이블의 항목과 일치하면 시스템은 해당 항목에 지정된 인터페이스를 사용하여 연결할 수 있는지 확인합니다.

목적지가 항목과 일치하지 않거나 알려진 경로가 모두 실패하면 시스템은 해당 항목을 기본 경로로 사용합니다. 로컬 영역 네트워크에 있는 호스트의 경우 기본 경로의 Gateway 필드는 인터넷에 직접 연결되어 있는 시스템으로 설정됩니다. 이 항목을 읽을 때 Flags 열에 게이트웨이가 사용 가능(UG)임을 나타내는지 확인합니다.

자체적으로 외부 세계의 게이트웨이로 작동하는 시스템의 기본 경로는 인터넷 서비스 제공업체(ISP)의 게이트웨이 시스템이 됩니다.

localhost

두 번째 경로는 localhost 경로입니다. localhost의 Netif 열에 지정된 인터페이스는 루프백 장치라고도 하는 lo0입니다. 이는 이 대상에 대한 모든 트래픽이 네트워크를 통해 전송되지 않고 내부에 있어야 함을 나타냅니다.

MAC 주소

0:e0: 로 시작하는 주소는 MAC 주소입니다. FreeBSD는 로컬 이더넷에서 호스트(예제에서는 test0)를 자동으로 식별하고 이더넷 인터페이스를 통해 해당 호스트에 대한 경로(re0)를 추가합니다. 이 유형의 경로에는 Expire 열에서 볼 수 있는 시간 제한이 있으며, 호스트가 특정 시간 동안 응답하지 않을 때 사용됩니다. 이 경우 이 호스트에 대한 경로는 자동으로 삭제됩니다. 이러한 호스트는 최단 경로 결정을 기반으로 로컬 호스트에 대한 경로를 계산하는 RIP(라우팅 정보 프로토콜)를 사용하여 식별됩니다.

subnet

FreeBSD는 로컬 서브넷에 대한 서브넷 경로를 자동으로 추가합니다. 이 예에서 10.20.30.255는 서브넷 10.20.30의 브로드캐스트 주소이고 example.com은 해당 서브넷과 연결된 도메인 이름입니다. 지정 link#1은 머신의 첫 번째 이더넷 카드를 나타냅니다.

로컬 네트워크 호스트와 로컬 서브넷은 routed(8)이라는 데몬에 의해 경로가 자동으로 구성됩니다. 이 데몬이 실행되지 않으면 관리자가 정적으로 정의한 경로만 존재합니다.

host

host1 줄은 이더넷 주소로 호스트를 나타냅니다. 이 호스트는 보내는 호스트이므로 FreeBSD는 이더넷 인터페이스가 아닌 루프백 인터페이스(lo0)를 사용한다는 것을 알고 있습니다.

두 개의 host2 줄은 ifconfig(8)을 사용하여 생성된 별칭을 나타냅니다. lo0 인터페이스 뒤의 기호는 루프백 주소 외에 별칭이 설정되었음을 나타냅니다. 이러한 경로는 해당 별칭을 지원하는 호스트에만 표시되며 로컬 네트워크의 다른 모든 호스트에는 해당 경로에 대한 link#1 줄이 있습니다.

224

마지막 줄(대상 서브넷 224)은 멀티캐스팅을 처리합니다.

각 경로의 다양한 속성은 Flags 열에서 볼 수 있습니다. 흔히 볼 수 있는 라우팅 테이블 플래그에는 이러한 플래그 중 일부와 그 의미가 요약되어 있습니다:

표 1. 흔히 볼 수 있는 라우팅 테이블 플래그
플래그
목적
U
경로가 활성(up)입니다.
H
경로 대상은 단일 호스트입니다.
G
이 대상에 대한 모든 것을 이 게이트웨이로 보내면 이 게이트웨이에서 어디로 보낼지 알아냅니다.
S
이 경로는 정적으로 구성되었습니다.
C
이 경로를 기반으로 새 경로를 복제하여 머신이 연결할 수 있도록 합니다. 이 유형의 경로는 일반적으로 로컬 네트워크에 사용됩니다.
W
경로는 로컬 영역 네트워크(복제) 경로를 기반으로 자동 구성되었습니다.
L
경로에는 이더넷(링크) 하드웨어에 대한 참조가 포함됩니다.

FreeBSD 시스템에서는 기본 게이트웨이의 IP 주소를 지정하여 /etc/rc.conf에서 기본 경로를 정의할 수 있습니다:

defaultrouter="10.20.30.1"

route를 사용하여 수동으로 경로를 추가할 수도 있습니다:

$ route add default 10.20.30.1

수동으로 추가한 경로는 재부팅 후에도 유지되지 않습니다. 네트워크 라우팅 테이블의 수동 조작에 대한 자세한 내용은 route(8)을 참조하세요.

34.2.2. 정적 경로로 라우터 구성하기

듀얼 홈 시스템인 경우 FreeBSD 시스템을 네트워크의 기본 게이트웨이 또는 라우터로 구성할 수 있습니다. 듀얼 홈 시스템은 적어도 두 개의 서로 다른 네트워크에 상주하는 호스트입니다. 일반적으로 각 네트워크는 별도의 네트워크 인터페이스에 연결되지만, IP 앨리어싱을 사용하여 각각 다른 서브넷에 있는 여러 주소를 하나의 물리적 인터페이스에 바인딩할 수 있습니다.

시스템이 인터페이스 간에 패킷을 전달하려면 FreeBSD를 라우터로 구성해야 합니다. 인터넷 표준과 좋은 엔지니어링 관행으로 인해 FreeBSD 프로젝트는 이 기능을 기본적으로 활성화하지 않지만 /etc/rc.conf에 이 줄을 추가하여 부팅 시 시작되도록 구성할 수 있습니다:

gateway_enable="YES"          # Set to YES if this host will be a gateway

지금 라우팅을 사용하려면 sysctl(8) 변수 net.inet.ip.forwarding을 1로 설정하세요. 라우팅을 중지하려면 이 변수를 0으로 재설정하세요.

라우터의 라우팅 테이블에는 다른 네트워크에 도달하는 방법을 알 수 있도록 추가 경로가 필요합니다. 경로는 정적 경로를 사용하여 수동으로 추가하거나 라우팅 프로토콜을 사용하여 경로를 자동으로 학습할 수 있습니다. 정적 경로는 소규모 네트워크에 적합하며 이 섹션에서는 소규모 네트워크에 정적 라우팅 항목을 추가하는 방법을 설명합니다.

Note
대규모 네트워크의 경우, 정적 경로는 빠르게 확장할 수 없게 됩니다. FreeBSD는 라우팅 프로토콜인 RIP, 버전 1과 2, IRDP를 제공하는 표준 BSD 라우팅 데몬 routed(8)와 함께 제공됩니다. BGP 및 OSPF 라우팅 프로토콜에 대한 지원은 net/quagga 패키지 또는 포트를 사용하여 설치할 수 있습니다.

다음 네트워크를 생각해 보세요:

static-routes.png

이 시나리오에서 라우터A는 나머지 인터넷에 대한 라우터 역할을 하는 FreeBSD 머신입니다. 기본 경로가 10.0.0.1로 설정되어 외부 세계와 연결할 수 있습니다. 라우터B는 이미 192.168.1.1을 기본 게이트웨이로 사용하도록 구성되어 있습니다.

정적 경로를 추가하기 전 라우터A의 라우팅 테이블은 다음과 같습니다:

$ netstat -nr
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif  Expire
default            10.0.0.1           UGS         0    49378    xl0
127.0.0.1          127.0.0.1          UH          0        6    lo0
10.0.0.0/24        link#1             UC          0        0    xl0
192.168.1.0/24     link#2             UC          0        0    xl1

현재 라우팅 테이블을 사용하면 라우터A192.168.2.0/24 네트워크에 대한 경로가 없습니다. 다음 명령은 192.168.1.2를 다음 홉으로 사용하여 라우터A의 라우팅 테이블에 Internal Net 2 네트워크를 추가합니다:

$ route add -net 192.168.2.0/24 192.168.1.2

이제 라우터A192.168.2.0/24 네트워크의 모든 호스트에 연결할 수 있습니다. 그러나 FreeBSD 시스템이 재부팅되면 라우팅 정보가 유지되지 않습니다. 정적 경로를 영구적으로 유지해야 하는 경우 /etc/rc.conf에 추가하세요:

$ route add -net 192.168.2.0/24 192.168.1.2