보조 네트워크 인터페이스를 Ubuntu EC2 인스턴스에서 작동시키려면 어떻게 해야 합니까?
보조 네트워크 인터페이스를 내 Ubuntu Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 작동하도록 하고 싶습니다.
간략한 설명
경고: 보조 탄력적 네트워크 인터페이스는 고급 사용자를 대상으로 합니다. 이 솔루션은 다음과 같은 사용 사례에만 사용하십시오. 단일 네트워크 인터페이스를 사용할 수 없습니다. 동일한 서브넷의 네트워크 인터페이스 두 개를 인스턴스 하나에 연결해야 합니다. 비대칭 라우팅 문제를 피하려면 단일 탄력적 네트워크 인터페이스를 사용하거나 중복된 탄력적 네트워크 인터페이스를 겹치지 않는 서브넷에 배치하십시오. 또는 Ubuntu 24.04 LTS 이상을 사용하십시오.
Amazon Linux EC2 인스턴스가 아닌 인스턴스에 보조 네트워크 인터페이스를 추가하면 트래픽 흐름 문제가 발생합니다. 이러한 문제는 기본 및 보조 네트워크 인터페이스가 동일한 서브넷에 있고 게이트웨이가 하나인 라우팅 테이블이 하나이기 때문에 발생합니다. 보조 네트워크 인터페이스로 들어오는 트래픽은 기본 네트워크 인터페이스를 사용하여 인스턴스를 떠납니다. 보조 IP 주소는 기본 네트워크 인터페이스의 MAC 주소에 속하지 않으므로 보조 인터페이스는 작동하지 않습니다.
참고: Ubuntu 24.04에서는 다음 단계가 필요하지 않습니다. Ubuntu 24.04는 이 고급 구성을 자동으로 처리합니다.
보조 인터페이스를 생성한 후 작동하도록 하려면 다음 단계를 완료하십시오.
- 라우팅 테이블을 구성합니다.
- 보조 인터페이스의 트래픽이 새 라우팅 테이블을 사용하도록 사용자 지정 라우팅 테이블 정책 데이터베이스에 규칙을 설정합니다.
시작하기 전에 Amazon EC2 인스턴스는 AWS 클라우드에 있으므로 모든 사용 사례에 다중 인터페이스가 유용한 것은 아니라는 점을 참고하세요. 다음 예는 보조 네트워크 인터페이스를 사용할 필요가 없는 경우를 보여줍니다.
- 네트워크 처리량 늘리기: 인스턴스 유형과 크기를 기반으로 제한이 설정되기 때문에 네트워크 처리량은 증가하지 않습니다. 자세한 내용은 Amazon EC2 인스턴스 유형을 참조하십시오.
- 탄력적 IP 주소 늘리기: 대부분의 애플리케이션이 DNS와 잘 작동하므로 인스턴스에 엘라스틱 IP 주소를 추가할 필요가 없습니다. 예를 들어 Apache는 이름 기반 가상 호스트를 사용할 수 있습니다. 자세한 내용을 알아보려면 Apache 웹사이트에서 이름 기반 가상 호스트 지원을 참조하십시오.
참고: 보조 네트워크 인터페이스를 추가하는 단계는 다음 Ubuntu 버전마다 다릅니다.
- Ubuntu 14.04
- Ubuntu 16.04
- Ubuntu 18.04
- Ubuntu 20.04
- Ubuntu 22.04
해결 방법
참고: 다음 해결 방법의 단계는 나열된 Linux 버전에서 테스트되었지만 구성의 사용자 지정 설정을 수정해야 할 수도 있습니다. 모든 프로시저는 루트 사용자 권한으로 실행해야 합니다. sudo -i를 사용하여 루트 사용자가 되거나 sudo로 모든 명령을 실행하십시오.
Ubuntu 14.04 또는 16.04 구성
단일 파일을 사용하여 보조 인터페이스 구성 파일을 생성하고 라우팅 테이블을 구성한 다음 Ubuntu에 대한 라우팅 정책 규칙을 설정할 수 있습니다.
Ubuntu 14.04 또는 16.04를 구성하려면 다음 단계를 완료하십시오.
-
기본 네트워크 인터페이스의 이름을 가져오려면 다음 명령을 실행합니다.
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 ip link show ens4 --->verify
-
보조 인터페이스용 구성 파일 생성:
vi /etc/network/interfaces.d/51-eth1.cfg
**참고:**보조 인터페이스 이름과 일치하도록 eth1을 변경합니다.
다음 명령은 172.31.21.115의 단일 IP 주소와 보조 인터페이스의 게이트웨이가 172.31.16.1인 경우의 예입니다.
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 주소여야 합니다.
다음 명령은 여러 IP 주소의 예입니다. 이 예에서 IP 주소는 172.31.21.115 및 172.31.18.46이고 게이트웨이는 172.31.16.1입니다.
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
참고: 예제 IP 주소 및 게이트웨이를 해당 정보로 바꾸세요.
-
기본 테이블에서 기본 게이트웨이를 덮어쓰지 않도록 restrict-default-gw 파일을 생성하십시오.
vi /etc/dhcp/dhclient-enter-hooks.d/restrict-default-gw
-
restrict-default-gw 파일에 다음 줄을 추가합니다.
case ${interface} in eth0) ;; *) unset new_routers ;; esac
참고: eth0을 해당 기본 인터페이스 이름으로 바꾸세요.
-
네트워크를 다시 시작합니다.
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칸 들여쓰기를 사용합니다.
Ubuntu 18.04, 20.04, 22.04를 구성하려면 다음 단계를 완료하십시오.
-
보조 인터페이스용 구성 파일 생성:
vi /etc/netplan/51-eth1.yaml
-
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 범위를 찾으려면 다음 단계를 완료하십시오.
- Amazon EC2 콘솔을 열고 인스턴스를 선택한 다음 인스턴스를 선택합니다.
- 네트워킹 탭에서 네트워크 인터페이스로 스크롤한 다음 보조 네트워크 인터페이스의 서브넷 ID를 확인합니다.
- Amazon Virtual Private Cloud(Amazon VPC) 콘솔을 열고 서브넷을 선택한 다음 서브넷 ID에 나열된 IPv4 CIDR 범위를 확인합니다.
- 네트워크 구성을 적용하려면 다음 명령을 실행합니다.
netplan --debug apply
관련 정보
관련 콘텐츠
- 질문됨 일 년 전lg...
- 질문됨 4달 전lg...
- 질문됨 5달 전lg...
- AWS 공식업데이트됨 5달 전
- AWS 공식업데이트됨 2년 전