Linux 서버를 라우터로 전환하여 트래픽을 정적이고 동적으로 처리하는 방법-10 부


LFCE ( Linux Foundation Certified Engineer ) 시리즈의 이전 자습서에서 예상했듯이이 기사에서는 특정 애플리케이션을 사용하여 IP 트래픽을 정적이고 동적으로 라우팅하는 방법에 대해 설명합니다.

먼저 몇 가지 정의를 곧바로 살펴 보겠습니다.

  1. In simple words, a packet is the basic unit that is used to transmit information within a network. Networks that use TCP/IP as network protocol follow the same rules for transmission of data: the actual information is split into packets that are made of both data and the address where it should be sent to.
  2. Routing is the process of “guiding” the data from source to destination inside a network.
  3. Static routing requires a manually-configured set of rules defined in a routing table. These rules are fixed and are used to define the way a packet must go through as it travels from one machine to another.
  4. Dynamic routing, or smart routing (if you wish), means that the system can alter automatically, as needed, the route that a packet follows.

고급 IP 및 네트워크 장치 구성

iproute 패키지는 ifconfig 및 route 와 같은 레거시 도구를 대체하기 때문에이 문서 전체에서 사용할 네트워킹 및 트래픽 제어를 관리하기위한 도구 세트를 제공합니다.

iproute 제품군의 핵심 유틸리티는 간단히 ip라고합니다. "기본 구문은 다음과 같습니다.

# ip object command

여기서 object 는 다음 중 하나 일 수 있습니다 (가장 빈번한 객체 만 표시됩니다. 전체 목록은 man ip 를 참조하십시오).

  1. link: network device.
  2. addr: protocol (IP or IPv6) address on a device.
  3. route: routing table entry.
  4. rule: rule in routing policy database.

반면 command 는 객체에 대해 수행 할 수있는 특정 작업을 나타냅니다. 다음 명령을 실행하여 특정 개체에 적용 할 수있는 전체 명령 목록을 표시 할 수 있습니다.

# ip object help

예를 들면

# ip link help

예를 들어 위의 이미지는 다음 명령을 사용하여 네트워크 인터페이스의 상태를 변경할 수 있음을 보여줍니다.

# ip link set interface {up | down}

ip ‘명령의 예를 더 보려면 IP 주소를 구성하는 데 유용한‘ip’명령 10 개를 읽어보십시오.

이 예에서는 eth1 을 비활성화 및 활성화합니다.

# ip link show
# ip link set eth1 down
# ip link show

eth1을 다시 활성화하려면

# ip link set eth1 up

모든 네트워크 인터페이스를 표시하는 대신 다음 중 하나를 지정할 수 있습니다.

# ip link show eth1

eth1에 대한 모든 정보를 반환합니다.

다음 세 가지 명령 중 하나를 사용하여 현재 기본 라우팅 테이블을 볼 수 있습니다.

# ip route show
# route -n
# netstat -rn

세 명령의 출력에서 첫 번째 열은 대상 네트워크를 나타냅니다. " ip route show의 출력 (키워드 dev 뒤에 옴)은 해당 네트워크에 대한 물리적 게이트웨이 역할을하는 네트워크 장치도 표시합니다.

요즘에는 ip 명령 이 route보다 선호되지만 나머지에 대한 자세한 설명은 man ip-route man route 를 참조 할 수 있습니다. "열의.

icmp (ping) 패킷을 dev2에서 dev4로 또는 그 반대 방향으로 라우팅하려고합니다 (두 클라이언트 시스템이 서로 다른 네트워크에 있음). 각 NIC의 이름과 해당 IPv4 주소는 대괄호 안에 표시됩니다.

테스트 환경은 다음과 같습니다.

Client 1: CentOS 7 [enp0s3: 192.168.0.17/24] - dev1
Router: Debian Wheezy 7.7 [eth0: 192.168.0.15/24, eth1: 10.0.0.15/24] - dev2
Client 2: openSUSE 13.2 [enp0s3: 10.0.0.18/24] - dev4

dev1 (CentOS 상자)에서 라우팅 테이블을 보겠습니다.

# ip route show

그런 다음 enp0s3 NIC와 192.168.0.15에 대한 연결을 사용하여 10.0.0.0/24 네트워크의 호스트에 액세스하도록 수정합니다.

# ip route add 10.0.0.0/24 via 192.168.0.15 dev enp0s3

기본적으로 \"192.168.0.15를 게이트웨이로 사용하여 enp0s3 네트워크 인터페이스를 통해 10.0.0.0/24 네트워크에 경로 추가\"로 표시됩니다.

마찬가지로 dev4 (openSUSE 상자)에서 192.168.0.0/24 네트워크의 호스트를 ping합니다.

# ip route add 192.168.0.0/24 via 10.0.0.15 dev enp0s3

마지막으로 데비안 라우터에서 전달을 활성화해야합니다.

# echo 1 > /proc/sys/net/ipv4/ip_forward

이제 ping을하겠습니다.

과,

이러한 설정을 부팅시에도 유지하려면 라우터에서 /etc/sysctl.conf 를 편집하고 다음과 같이 net.ipv4.ip_forward 변수가 true로 설정되어 있는지 확인하십시오.

net.ipv4.ip_forward = 1

또한 두 클라이언트 모두에서 NIC를 구성합니다 (openSUSE의 /etc/sysconfig/network 및 CentOS의 /etc/sysconfig/network-scripts 에서 구성 파일을 찾으십시오) – 두 경우 모두 ifcfg-enp0s3 라고합니다.

다음은 openSUSE 상자의 구성 파일입니다.

BOOTPROTO=static
BROADCAST=10.0.0.255
IPADDR=10.0.0.18
NETMASK=255.255.255.0
GATEWAY=10.0.0.15
NAME=enp0s3
NETWORK=10.0.0.0
ONBOOT=yes

Linux 시스템을 라우터로 사용할 수있는 또 다른 시나리오는 사설 LAN과 인터넷 연결을 공유해야하는 경우입니다.

Router: Debian Wheezy 7.7 [eth0: Public IP, eth1: 10.0.0.15/24] - dev2
Client: openSUSE 13.2 [enp0s3: 10.0.0.18/24] - dev4

이전 예에서와 같이 클라이언트에서 패킷 전달 및 정적 라우팅 테이블을 설정하는 것 외에도 라우터에 몇 가지 iptables 규칙을 추가해야합니다.

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

첫 번째 명령은 nat (네트워크 주소 변환) 테이블의 POSTROUTING 체인에 규칙을 추가하여 나가는 패키지에 eth0 NIC를 사용해야 함을 나타냅니다.

MASQUERADE 는이 NIC에 동적 IP가 있으며 패키지를 인터넷의 \" 야생 환경 \"으로 보내기 전에 패킷의 개인 소스 주소가 "공유기의 공인 IP로 변경되었습니다.

많은 호스트가있는 LAN에서 라우터는 /proc/net/ip_conntrack 에서 설정된 연결을 추적하므로 인터넷에서 응답을 반환 할 위치를 알 수 있습니다.

다음 출력의 일부만 :

# cat /proc/net/ip_conntrack

다음 스크린 샷에 표시됩니다.

패킷의 출처 (openSUSE 상자의 개인 IP) 및 대상 (Google DNS)이 강조 표시된 곳입니다. 이것은 다음을 실행 한 결과입니다.

# curl www.tecmint.com

openSUSE 상자에.

이미 짐작하실 수 있듯이 라우터는 Google의 8.8.8.8을 네임 서버로 사용하고 있으며, 이는 발신 패킷의 대상이 해당 주소를 가리키는 이유를 설명합니다.

참고 : 인터넷에서 들어오는 패키지는 이미 설정된 연결 (명령 # 2)의 일부인 경우에만 허용되고 나가는 패키지는 \" 무료 종료 \"(명령 # 3)가 허용됩니다.

이 시리즈의 8 부 – Iptables 방화벽 구성에 설명 된 단계에 따라 iptables 규칙을 영구적으로 만드는 것을 잊지 마십시오.

Quagga를 사용한 동적 라우팅

오늘날 Linux에서 동적 라우팅에 가장 많이 사용되는 도구는 quagga 입니다. "이를 통해 시스템 관리자는 비교적 저렴한 Linux 서버로 강력하고 값 비싼 Cisco 라우터에서 제공하는 것과 동일한 기능을 구현할 수 있습니다.

도구 자체는 라우팅을 처리하지 않고 패킷을 처리하기위한 새로운 최상의 경로를 학습함에 따라 커널 라우팅 테이블을 수정합니다.

조금 전에 개발이 중단 된 프로그램 인 zebra의 포크이므로 역사적인 이유로 얼룩말과 동일한 명령과 구조를 유지합니다. 그래서 지금부터 얼룩말에 대한 많은 언급을 보게 될 것입니다.

단일 기사에서 동적 라우팅과 모든 관련 프로토콜을 다룰 수는 없지만 여기에 제시된 내용이 여러분이 구축 할 시작점이 될 것이라고 확신합니다.

선택한 배포판에 quagga를 설치하려면 :

# aptitude update && aptitude install quagga 				[On Ubuntu]
# yum update && yum install quagga 					[CentOS/RHEL]
# zypper refresh && zypper install quagga 				[openSUSE]

eth0이 IP 192.168.0.1의 주 게이트웨이 라우터에 연결된다는 점만 제외하면 예제 # 3과 동일한 환경을 사용합니다.

다음으로 /etc/quagga/daemons 를 다음과 같이 편집하십시오.

zebra=1
ripd=1

이제 다음 구성 파일을 만듭니다.

# /etc/quagga/zebra.conf
# /etc/quagga/ripd.conf

다음 줄을 추가합니다 (선택한 호스트 이름과 암호로 대체).

service quagga restart
hostname    	dev2
password    	quagga
# service quagga restart

참고 : ripd.conf 는 라우팅 정보 프로토콜에 대한 구성 파일로, 라우터에 도달 할 수있는 네트워크와 네트워크의 거리 (홉 양 측면에서)에 대한 정보를 제공합니다.

이것은 quagga와 함께 사용할 수있는 프로토콜 중 하나 일 뿐이며, 일반 텍스트로 자격 증명을 전달하는 단점이 있지만 사용하기 쉽고 대부분의 네트워크 장치에서 지원하기 때문에이 자습서에서 선택했습니다. 따라서 구성 파일에 적절한 권한을 할당해야합니다.

# chown quagga:quaggavty /etc/quagga/*.conf
# chmod 640 /etc/quagga/*.conf 

이 예에서는 두 개의 라우터에 다음 설정을 사용합니다 (앞에서 설명한대로 라우터 # 2 에 대한 구성 파일을 만들어야합니다).

중요 : 두 라우터 모두에 대해 다음 설정을 반복하는 것을 잊지 마십시오.

라우터와 커널 사이의 논리적 매개자 인 zebra (포트 2601 에서 수신)에 연결합니다.

# telnet localhost 2601

/etc/quagga/zebra.conf 파일에 설정된 비밀번호를 입력 한 다음 구성을 활성화합니다.

enable
configure terminal

각 NIC의 IP 주소와 네트워크 마스크를 입력합니다.

inter eth0
ip addr 192.168.0.15
inter eth1
ip addr 10.0.0.15
exit
exit
write

이제 RIP 데몬 터미널 (포트 2602)에 연결해야합니다.

# telnet localhost 2602

/etc/quagga/ripd.conf 파일에 구성된대로 사용자 이름과 비밀번호를 입력 한 후 다음 명령을 굵게 입력합니다 (명확성을 위해 주석이 추가됨).

enable turns on privileged mode command.
configure terminal changes to configuration mode. This command is the first step to configuration
router rip enables RIP.
network 10.0.0.0/24 sets the RIP enable interface for the 10.0.0.0/24 network. 
exit
exit
write writes current configuration to configuration file.

참고 : 두 경우 모두 이전에 추가 한 행 ( /etc/quagga/zebra.conf /etc/quagga/ripd.conf )에 구성이 추가됩니다. ".

마지막으로 두 라우터의 zebra 서비스에 다시 연결하고 각 라우터가 다른 라우터 뒤에있는 네트워크에 대한 경로를 어떻게 \" 학습 \"했는지 확인하고 다음 홉을 확인합니다. show ip route 명령을 실행하여 네트워크 :

# show ip route

다른 프로토콜이나 설정을 시도하려면 Quagga 프로젝트 사이트에서 추가 문서를 참조 할 수 있습니다.

결론

이 기사에서는 Linux 박스 라우터를 사용하여 정적 및 동적 라우팅을 설정하는 방법을 설명했습니다. 원하는만큼 라우터를 추가하고 원하는만큼 실험 해보세요. 의견이나 질문이 있으시면 언제든지 아래 연락처 양식을 사용하여 저희에게 연락하십시오.