내용으로 건너뛰기

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

7분 분량
0

보조 네트워크 인터페이스를 나의 Ubuntu Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 작동시키고 싶습니다.

간략한 설명

중요: 보조 Elastic 네트워크 인터페이스는 고급 사용자를 대상으로 합니다. 단일 네트워크 인터페이스를 사용할 수 없는 경우에만 이 솔루션을 사용하세요.

Amazon Linux EC2 인스턴스가 아닌 인스턴스에 보조 네트워크 인터페이스를 추가하면 트래픽 흐름 문제가 발생할 수 있습니다. 이러한 문제는 보조 네트워크 인터페이스가 기본 네트워크 인터페이스를 통해 들어오는 트래픽을 라우팅하기 때문에 발생합니다. 보조 IP 주소는 기본 네트워크 인터페이스의 MAC 주소에 속하지 않으므로 보조 인터페이스는 작동하지 않습니다.

참고: Ubuntu 24.04 버전에서는 다음의 단계가 필요하지 않으며 이 고급 구성이 자동으로 처리됩니다.

보조 인터페이스를 생성한 후 작동시키려면 다음 단계를 완료하세요.

  1. 라우팅 테이블을 구성하세요.
  2. 보조 인터페이스의 트래픽이 새 라우팅 테이블을 사용하도록 사용자 지정 라우팅 테이블 정책 데이터베이스에 규칙을 설정하세요.

참고: Amazon EC2 인스턴스는 AWS 클라우드에 있으며, 모든 인스턴스가 다중 인터페이스를 사용하는 것이 유리하지는 않습니다.

네트워크 처리량을 늘리기 위한 보조 네트워크 인터페이스가 불필요할 수도 있습니다. AWS는 인스턴스 유형 및 크기에 따라 할당량을 설정하며, 이 구성은 네트워크 처리량을 제한합니다. 자세한 내용은 Amazon EC2 인스턴스 유형을 참조하세요.

Elastic IP 주소를 늘리기 위해 보조 네트워크 인터페이스가 불필요할 수도 있습니다. 대부분의 애플리케이션이 DNS에서 잘 작동하므로 인스턴스에 Elastic IP 주소를 추가할 필요가 없습니다. 예를 들어 Apache는 이름 기반 가상 호스트를 사용할 수 있습니다. 자세한 내용은 Apache 웹사이트의 이름 기반 가상 호스트 지원을 참조하세요.

보조 네트워크 인터페이스의 추가 단계는 운영 체제에 따라 다음과 같이 다릅니다.

  • Ubuntu 14.04
  • Ubuntu 16.04
  • Ubuntu 18.04, 20.04 및 22.04
  • Debian 12(다른 서브넷)

해결 방법

참고: 다음 해결 방법의 단계는 목록에 있는 Linux 버전에서 테스트되었습니다. 구성의 사용자 지정 설정을 수정하여 루트 사용자 권한으로 다음 단계를 실행하세요. sudo -i로 루트 사용자를 사용하거나 sudo로 모든 명령을 실행하세요.

Ubuntu 14.04 또는 16.04 구성

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

다음 단계를 완료하세요.

  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

    중요: 위 예시에서 기본 인터페이스의 이름은 eth0eth1으로 지정되었습니다. 그러나 m4 및 m5 제품군 유형처럼 향상된 네트워킹을 지원하는 인스턴스의 경우 이름이 일치하지 않을 수 있습니다. 예를 들어 보조 인터페이스의 이름이 eth0일 때 기본 인터페이스의 이름은 ens3일 수 있습니다. 이러한 이름 지정의 불일치는 인스턴스가 실행되는 동안 보조 인터페이스를 추가할 때 발생합니다. 이름 지정의 불일치를 방지하려면 시작할 때 인터페이스를 추가하거나 인스턴스를 재부팅하세요. 인터페이스가 실행 중인 경우 다음 명령을 사용하여 이름을 변경합니다.

    ip link set eth0 name ens4
    ip link set ens4 up
    ip link show ens4
  2. 보조 인터페이스용 구성 파일을 생성하세요.

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

    참고: eth1을 사용자의 보조 인터페이스 이름으로 바꾸세요.

    다음 명령은 보조 인터페이스에서 게이트웨이 172.31.16.1을 사용하는 단일 IP 주소 172.31.21.115의 예입니다.

    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

    참고: 172.31.21.115를 사용자의 IP 주소로 바꾸고 172.31.16.1을 사용자의 게이트웨이로 바꾸세요. 게이트웨이는 서브넷의 첫 번째 유효한 IP 주소여야 합니다.
    다음 명령은 다중 IP 주소의 예입니다.

    auto eth1
    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

    참고: 172.31.21.115172.31.18.46을 사용자의 IP 주소로 바꾸고 172.31.16.1을 사용자의 게이트웨이로 바꾸세요.

  3. restrict-default-gw 파일을 생성하여 메인 테이블에서 기본 게이트웨이가 덮어쓰기되지 않도록 방지하세요.

    vi /etc/dhcp/dhclient-enter-hooks.d/restrict-default-gw
  4. restrict-default-gw 파일에 다음의 줄을 추가하세요.

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

    참고: eth0을 사용자의 기본 인터페이스 이름으로 바꾸세요.

  5. 네트워크를 재시작하세요.
    Ubuntu 14.04의 경우, 다음 명령을 실행하세요.

    (ifdown eth1 && ifup eth1)

    Ubuntu 16.04의 경우, 다음 명령을 실행하세요.

    systemctl restart networking

Ubuntu 18.04, 20.04, 22.04 구성

Ubuntu 18.04, 20.04, 22.04는 Netplan 네트워킹 구성을 사용합니다. Netplan은 YAML 형식을 사용합니다. YAML 형식에서는 정확한 들여쓰기가 중요합니다. 다음 Netplan 예시에서는 2칸 들여쓰기를 사용합니다.

다음 단계를 완료하세요.

  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
              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 콘솔을 여세요.
  2. 인스턴스를 선택한 다음 인스턴스를 선택하세요.
  3. Networking 탭의 Network interfaces에서 보조 네트워크 인터페이스의 서브넷 ID를 기록하세요.
  4. Amazon VPC 콘솔을 여세요.
  5. 서브넷을 선택한 다음 서브넷 ID의 목록화된 IPv4 CIDR 범위를 확인하세요.
  6. 네트워크 구성을 적용하려면 다음 명령을 실행하세요.
    netplan --debug apply

다른 서브넷의 보조 ENI를 사용하여 Debian 12를 구성

Debian 12는 기본적으로 네트워크 구성에 systed-networkd를 사용합니다. 보조 ENI를 다른 서브넷에 배치하는 경우 소스 기반 라우팅 규칙을 사용하여 정책 라우팅 테이블을 생성해야 합니다. 이러한 규칙이 없으면 보조 인터페이스의 트래픽이 기본 인터페이스의 기본 경로를 사용하여 실패하게 됩니다.

중요: 이 섹션에서는 다양한 서브넷 구성을 다룹니다. 위의 Ubuntu 섹션은 동일한 서브넷 구성만 다룹니다.

다음 단계를 완료하세요.

  1. systed-networkd가 활성 네트워크 서비스인지 확인하세요.

    for SVC in networking systemd-networkd NetworkManager; do echo "${SVC}: $(systemctl is-active "${SVC}")"; done

    예상 결과:

    networking: inactive
    systemd-networkd: active
    NetworkManager: inactive

    systed-networkd가 활성화되지 않은 경우 계속 진행하기 전에 활성화하세요.

  2. 구성을 영구적으로 설정하기 전에 수동으로 테스트하세요.

    IF=ens6
    IP=10.0.2.100
    CIDR=10.0.2.64/26
    GW=10.0.2.65
    TABLE=101
    
    
    sudo ip link set $IF up mtu 9001
    sudo ip addr add $IP/26 dev $IF
    
    
    sudo ip route add $CIDR dev $IF proto static src $IP table $TABLE
    sudo ip route add default via $GW dev $IF table $TABLE
    
    
    sudo ip rule add from $IP/32 lookup $TABLE priority $TABLE

    참고: ens6을 사용자의 보조 인터페이스 이름으로, 10.0.2.100을 사용자의 보조 ENI IP로, 10.0.2.64/26을 사용자의 보조 서브넷 CIDR로, 10.0.2.65를 보조 서브넷의 게이트웨이로 바꾸세요.

  3. 보조 인터페이스가 자체 게이트웨이를 통해 라우팅되는지 확인하세요.

    ip route get 8.8.8.8 from 10.0.2.100

    예상 결과:

    8.8.8.8 from 10.0.2.100 via 10.0.2.65 dev ens6 table 101 uid 0
        cache
  4. 테스트가 성공하면 임시 구성을 해체하세요.

    sudo ip rule del from $IP/32 lookup $TABLE priority $TABLE
    sudo ip route flush table $TABLE
    sudo ip addr flush dev $IF
  5. 영구 systemd-networkd 구성 파일을 생성하세요.

    sudo touch /etc/systemd/network/60-ens6.network

    참고: ens6을 사용자의 보조 인터페이스 이름으로 바꾸세요.

  6. 60-ens6.network 파일에 다음 콘텐츠를 추가하세요.

    [Match]
    Name=ens6
    
    
    [Link]
    MTUBytes=9001
    
    
    [Network]
    Address=10.0.2.100/26
    IPv6AcceptRA=no
    
    
    [Route]
    Destination=0.0.0.0/0
    Gateway=10.0.2.65
    Table=101
    
    
    [Route]
    Destination=10.0.2.64/26
    Scope=link
    PreferredSource=10.0.2.100
    Table=101
    
    
    [RoutingPolicyRule]
    From=10.0.2.100/32
    Table=101
    Priority=101

    참고: ens6을 사용자의 보조 인터페이스 이름으로, 10.0.2.100/26을 사용자의 보조 ENI IP 및 CIDR로, 10.0.2.65를 보조 서브넷의 게이트웨이로, 10.0.2.64/26을 사용자의 보조 서브넷 CIDR로 바꾸세요.

  7. 네트워크 구성 재로딩

    sudo networkctl reload && sudo networkctl reconfigure ens6

    참고: ens6을 사용자의 보조 인터페이스 이름으로 바꾸세요.

  8. 보조 인터페이스에서 인바운드 트래픽을 허용하려면 역방향 경로 필터를 루즈 모드로 설정하세요. 현재 값을 확인하세요.

    sysctl net.ipv4.conf.all.rp_filter net.ipv4.conf.ens6.rp_filter

    둘 중 하나의 값이 1인 경우 다음의 줄을 사용하여 /etc/sysctl.d/99-multihome.conf를 만들거나 업데이트하세요.

    net.ipv4.conf.all.rp_filter = 2
    net.ipv4.conf.default.rp_filter = 2

    변경 사항을 적용하세요.

    sudo sysctl --system

    참고: rp_filter=2로 설정하면 루즈 모드가 활성화됩니다. 이렇게 하면 반환 경로가 다른 인터페이스를 사용하더라도 패킷이 보조 인터페이스에 도착할 수 있습니다.

  9. 각 인터페이스가 자체 게이트웨이를 통해 라우팅되는지 확인하세요.

    기본 ENI의 경우:

    ip route get 8.8.8.8 from 10.0.2.12

    예상 결과:

    8.8.8.8 from 10.0.2.12 via 10.0.2.1 dev ens5 uid 0
        cache

    보조 ENI의 경우:

    ip route get 8.8.8.8 from 10.0.2.100

    예상 결과:

    8.8.8.8 from 10.0.2.100 via 10.0.2.65 dev ens6 table 101 uid 0
        cache
  10. 인스턴스를 재부팅하고 9단계에서 검증 명령을 반복하여 구성이 유지되는지 하세요.

관련 정보

라우팅 테이블 구성

Elastic 네트워크 인터페이스

AWS 공식업데이트됨 10일 전
1 댓글

This article was reviewed and updated on 2026-08-26.

전문가

답글을 게시함 20시간 전