Ubuntu EC2 인스턴스에서 보조 네트워크 인터페이스를 사용하려면 어떻게 해야 하나요?

5분 분량
0

Ubuntu Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 보조 네트워크 인터페이스를 사용하고 싶습니다.

간략한 설명

경고: 보조 탄력적 네트워크 인터페이스는 고급 사용자를 위한 것입니다. 단일 네트워크 인터페이스를 사용할 수 없고 동일한 서브넷의 네트워크 인터페이스 두 개를 하나의 인스턴스에 연결해야 하는 경우에만 이 작업을 수행하세요. 비대칭 라우팅 문제를 방지하려면 탄력적 네트워크 인터페이스를 1개만 사용하거나 중복된 탄력적 네트워크 인터페이스를 겹치지 않는 서브넷에 배치합니다.

비 Amazon Linux EC2 인스턴스에 보조 네트워크 인터페이스를 추가하면 트래픽 흐름 문제가 발생합니다. 이러한 문제는 기본 및 보조 네트워크 인터페이스가 동일한 서브넷에 위치하고 게이트웨이 1개를 포함하는 라우팅 테이블이 1개이기 때문에 발생합니다. 보조 네트워크 인터페이스를 통해 들어오는 트래픽은 기본 네트워크 인터페이스를 통해 인스턴스에서 나갑니다. 하지만 보조 IP 주소가 기본 네트워크 인터페이스의 MAC 주소에 속하지 않기 때문에 이러한 흐름이 허용되지 않습니다.

보조 인터페이스를 생성한 후 작동하도록 하려면 다음을 수행하세요.

1.    라우팅 테이블을 구성합니다.

2.    보조 인터페이스의 트래픽에 새 라우팅 테이블이 사용되도록 사용자 지정 라우팅 테이블 정책 데이터베이스에 규칙을 설정합니다.

시작하기 전에, Amazon EC2 인스턴스는 AWS 클라우드에 있다는 점을 참고하세요. 즉, 여러 인터페이스를 사용하는 것이 모든 사용 사례에 도움이 되는 것은 아닙니다. 다음은 보조 네트워크 인터페이스를 사용할 필요가 없는 상황의 예시를 보여줍니다.

  • 네트워크 처리량 증가: 인스턴스 유형 및 크기에 따라 한도가 설정되므로 네트워크 처리량은 증가하지 않습니다. 자세한 정보는 Amazon EC2 인스턴스 유형을 참조하세요.
  • 탄력적 IP 주소 증가: 인터페이스당 탄력적 IP 주소가 부족한 경우, 더 많은 탄력적 IP 주소를 얻기 위해 인터페이스를 추가할 필요는 없습니다. 대부분의 애플리케이션은 도메인 이름 시스템과 호환됩니다. 예를 들어 Apache는 이름 기반 가상 호스트를 사용할 수 있습니다(Apache 웹 사이트에서 사용 가능).

참고: 보조 네트워크 인터페이스를 추가하는 단계는 다음 Ubuntu 버전에서 각각 다릅니다.

  • Ubuntu 14.04
  • Ubuntu 16.04
  • Ubuntu 18.04
  • Ubuntu 20.04

해결 방법

참고: 다음 해결 방법의 단계는 나열된 Linux 버전에서 테스트되었지만 구성의 사용자 지정 설정에 따라 약간의 수정이 필요할 수 있습니다.

Ubuntu 14.04 또는 16.04 구성

단일 파일을 사용하여 Ubuntu용 보조 인터페이스 구성 파일 생성, 라우팅 테이블 구성, 라우팅 정책 규칙 설정을 수행할 수 있습니다.

모든 절차는 루트 사용자 권한을 사용하여 실행되어야 합니다. sudo -i를 사용하여 루트 사용자가 되거나 sudo를 사용하여 모든 명령을 실행합니다.

1.     다음 명령을 실행하여 기본 네트워크 인터페이스의 이름을 가져옵니다.

ip a | grep ^[[:digit:]]

그러면 다음 메시지와 유사한 출력이 표시됩니다.

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000

중요: 이 예제에서 기본 인터페이스에는 eth0, eth1 등의 이름이 지정됩니다. 그러나 m4 및 m5 패밀리 형식 등의 향상된 네트워킹을 지원하는 인스턴스의 경우 명명 규칙이 일관되지 않을 수도 있습니다. 예를 들어, 보조 인스턴스의 이름이 eth0인 경우 기본 인스턴스의 이름은 ens3으로 지정될 수 있습니다. 이러한 일관되지 않은 명명 규칙은 인스턴스가 실행되고 있을 때 보조 인터페이스가 추가되는 경우에 발생합니다.

일관되지 않은 이름 지정을 방지하려면 인터페이스를 인스턴스의 시작 시간에 추가하거나 인스턴스를 재부팅합니다. 또는 인터페이스가 실행 중인 경우 다음 명령을 사용하여 이름을 변경할 수 있습니다.

ip link set eth0 name ens4 && ip link set ens4 up

2.    보조 인터페이스에 대한 구성 파일을 생성합니다. 다음 예제에서 eth1을 1단계의 보조 인터페이스 이름과 일치하도록 변경합니다.

vi /etc/network/interfaces.d/51-eth1.cfg

다음 명령은 단일 IP 주소가 172.31.21.115이고, 보조 인터페이스의 게이트웨이가 172.31.16.1인 예제입니다. 예제 IP 주소와 게이트웨이를 자신의 것으로 바꿉니다. 또한 게이트웨이는 서브넷에서 유효한 첫 번째 IP 주소여야 합니다.

auto eth1
iface eth1 inet static 
address 172.31.21.115
netmask 255.255.240.0

# Gateway configuration
up ip route add default via 172.31.16.1 dev eth1 table 1000

# Routes and rules
up ip route add 172.31.21.115 dev eth1 table 1000
up ip rule add from 172.31.21.115 lookup 1000

다음 명령은 다중 IP 주소에 대한 예제입니다. 이 예제에서는 IP 주소가 172.31.21.115 및 172.31.18.46이고, 게이트웨이가 172.31.16.1입니다. 예제 IP 주소와 게이트웨이를 자신의 것으로 바꿉니다.

auto eth1

# Enter one or more IP settings
iface eth1 inet static
address 172.31.21.115
netmask 255.255.240.0

iface eth1 inet static
address 172.31.18.46
netmask 255.255.240.0

# Default gateway for eth1
up ip route add default via 172.31.16.1 dev eth1 table 1000

# A route for every IP
up ip route add 172.31.21.115 dev eth1 table 1000
up ip route add 172.31.18.46 dev eth1 table 1000

# A policy rule for every IP
up ip rule add from 172.31.21.115 lookup 1000
up ip rule add from 172.31.18.46 lookup 1000

3.    restrict-default-gw 파일을 생성하여 주 테이블에서 기본 게이트웨이를 덮어쓰는 것을 방지합니다.

vi /etc/dhcp/dhclient-enter-hooks.d/restrict-default-gw

4.    restrict-default-gw 파일에 다음 행을 추가합니다. eth0을 1단계의 기본 인터페이스 이름과 일치하도록 변경해야 합니다.

case ${interface} in
  eth0)
    ;;
  *)
    unset new_routers
    ;;
esac

5.    네트워크를 다시 시작합니다.

Ubuntu 14.04의 경우 다음 명령을 참조하세요.

(ifdown eth1 && ifup eth1)

Ubuntu 16.04의 경우 다음 명령을 참조하세요.

systemctl restart networking

Ubuntu 18.04 및 20.04 구성

Ubuntu 18.04 및 20.04는 Netplan 네트워킹 구성을 사용합니다. 참고로 Netplan은 YAML 형식을 사용합니다. 즉, 들여쓰기가 매우 중요합니다. 다음 Netplan 예제에서는 2칸 들여쓰기를 사용합니다.

참고: 루트 사용자 권한으로 모든 명령을 실행합니다. sudo -i를 사용하여 루트 사용자가 되거나 sudo를 사용하여 모든 명령을 실행합니다.

1.    보조 인터페이스에 대한 구성 파일을 생성합니다.

vi /etc/netplan/51-eth1.yaml

2.    51-eth1.yaml 파일에 다음 행을 추가합니다. 사용 사례와 일치하도록 다음 예제를 편집합니다.

network:
  version: 2
  renderer: networkd
  ethernets:
    eth1:
      addresses:
       - 172.31.24.153/20
       - 172.31.28.195/20
      dhcp4: no
      routes:
       - to: 0.0.0.0/0
         via: 172.31.16.1 # Default gateway
         table: 1000
       - to: 172.31.24.153
         via: 0.0.0.0
         scope: link
         table: 1000
       - to: 172.31.28.195
         via: 0.0.0.0
         scope: link
         table: 1000
      routing-policy:
        - from: 172.31.24.153
          table: 1000
        - from: 172.31.28.195
          table: 1000

이 예제 YAML 파일은 보조 인터페이스(eth1)에서 두 개의 IP 주소를 구성합니다.

참고: YAML 파일에서 사용할 CIDR 범위를 찾으려면 다음 단계를 완료합니다.

1.    Amazon EC2 콘솔을 열고 [인스턴스(Instances)]를 선택한 다음 인스턴스를 선택합니다.

2.    Networking(네트워킹) 탭에서 Network interfaces(네트워크 인터페이스)로 스크롤하고 보조 네트워크 인터페이스의 서브넷 ID를 기록합니다.

3.    Amazon Virtual Private Cloud(VPC) 콘솔을 열고 Subnets(서브넷)을 선택한 다음, 서브넷 ID에 대해 나열된 IPv4 CIDR 범위를 기록합니다.

4.    네크워크 구성을 적용합니다.

netplan --debug apply

관련 정보

라우팅 테이블 구성

AWS 공식
AWS 공식업데이트됨 일 년 전
댓글 없음

관련 콘텐츠