안녕하세요.
오늘은 AWS의 ENI에 대해 알아보겠습니다.
# ENI 란?
ENI란 Elastic Network Interface의 약자로 EC2 인스턴스가 네트워크에 연결되기 위해 사용하는 가상 네트워크 어댑터(Virtual NIC) 입니다.
또한 ENI는 Private IP와 MAC 주소를 가지고 있으며 Public IP를 붙일 수도 있습니다.
그렇다고 ENI가 단순한 NIC는 아닙니다.
AWS에서 ENI는 EC2의 네트워크를 정의하는 논리적 단위입니다.
즉, EC2 인스턴스가 어떤 서브넷에 속할지, 어떤 보안그룹 규칙을 적용받을지,
그리고 어떤 라우팅 테이블을 따라 외부와 통신할지가 모두 ENI 단위에서 결정됩니다.
저희가 네트워크 아키텍쳐를 표현할 때 흔히들 서브넷 내부에 EC2를 표현하고는 합니다.
하지만 엄밀히 말하면 EC2는 가용영역에 배포되는 것으로 서브넷 내부에 배포되는 것은 ENI입니다.

이를 이용하여 같은 가용영역 내의 여러 다른 서브넷에 배포하는 것도 가능합니다.
# 네트워크 인터페이스 명
EC2를 처음 배포 후 `ip addr` 명령어로 네트워크 인터페이스를 확인하면 enX로 확인되는 것도 있고 ens로 확인되는 ec2도 있습니다.


이 둘의 차이는 바로 하이퍼바이저의 차이에 있습니다.
AWS EC2는 Xen과 Nitro 두 가지 방식의 하이퍼바이저를 사용하는데요.
Nitro가 더 최신이며 네트워크 효율이 높다는 장점이 있어 현재 대부분의 인스턴스 유형은 Nitro 기반 입니다.

인스턴스 유형별 하이퍼바이저 차이는 아래 링크에서 확인 가능합니다.
Amazon EC2 인스턴스 유형 - Amazon Elastic Compute Cloud
Amazon EC2 인스턴스 유형 인스턴스를 시작할 때 지정하는 인스턴스 유형에 따라 인스턴스에 사용되는 호스트 컴퓨터의 하드웨어가 결정됩니다. 각 인스턴스 유형은 서로 다른 컴퓨팅, 메모리, 스
docs.aws.amazon.com
Xen 방식

`ethtool` 명령어로 드라이버에 대한 정보를 볼 수 있다.
드라이버는 vif로 vif는 Virtual Interface의 약자로,
AWS EC2가 Xen 하이퍼바이저 위에서 동작할 때 게스트 OS(EC2 인스턴스)와 호스트 OS사이의 네트워크 통신을 중계하는 가상 네트워크 드라이버입니다.
Nitro 방식

탄력적 네트워크 어댑터(ENA) 드라이버는 높은 네트워크 속도를 제공합니다.
Nitro 기반의 EC2는 모두 해당 드라이버를 사용합니다.
간단히 말해 Xen 방식보다 Nitro 방식이 더 최신 방식이며 네트워크 속도가 더 높다는 장점을 갖고 있습니다.
# Secondary IP 추가
하나의 ENI에는 두번째 Private IP도 추가가 가능합니다.
이를 Secondary IP라고 합니다.

추가하고 싶은 ENI를 선택합니다.

새 IP 주소 할당을 클릭합니다.

이제 보조 프라이빗 IP가 추가된 것을 확인 가능합니다.

하지만 리눅스 내부에서는 아직 해당 주소가 확인되고 있지 않습니다.
네트워크 관련 서비스가 재시작 되지 않았기 때문입니다.
`sudo systemctl restart systemd-networkd` 해당 명령어로 재시작합니다.

곧 바로 확인이 가능합니다.

다른 서버에서 두 IP 모두에 ping 통신이 가능합니다.

당연하게 같은 ENI에 있는 IP로 같은 MAC으로 확인 됩니다.
감사합니다.