AWS NIC 구성

AWS NIC 구성

특정 사용 사례에 맞게 EC2 인스턴스를 설정하려고 합니다. 따라서 공개적으로 노출된 IP 주소를 가진 2개의 ENI가 필요합니다. (둘 다 ping이 가능해야 함)

지금까지 다음 단계를 수행했습니다.

  • 동일한 서브넷에 연결된 2개의 네트워크 인터페이스
  • 인스턴스 실행
  • 인스턴스의 각 ENI 카드에 연결된 탄력적 IP 주소 2개를 생성했습니다.

EC2 인스턴스 네트워크 인터페이스 섹션에서 다음 결과를 볼 수 있습니다.

공개IP

하지만 ping을 할 수 없었습니다 3.104.193.180.

또한 내 ip address결과는 다음과 같습니다. . .

ubuntu@ip-172-31-37-139:~$ ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc fq_codel state UP group default qlen 1000
    link/ether 06:ce:dd:28:5b:b8 brd ff:ff:ff:ff:ff:ff
    inet 172.31.37.139/20 brd 172.31.47.255 scope global dynamic eth0
       valid_lft 3460sec preferred_lft 3460sec
    inet6 fe80::4ce:ddff:fe28:5bb8/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc fq_codel state UP group default qlen 1000
    link/ether 06:a6:9a:4a:98:c6 brd ff:ff:ff:ff:ff:ff
    inet 172.31.41.29/20 brd 172.31.47.255 scope global dynamic eth1
       valid_lft 3460sec preferred_lft 3460sec
    inet6 fe80::4a6:9aff:fe4a:98c6/64 scope link
       valid_lft forever preferred_lft forever

그래서 내 질문은 입니다. . .

  • 다른 IP를 노출/핑 가능하게 하려면 어떻게 해야 합니까?
  • 서버 내에서 탄력적 IP를 모두 어떻게 알 수 있나요?

답변1

특정 인터페이스와 연결된 공용 IP 주소를 얻으려면 먼저 인터페이스에서 MAC 주소를 가져온 다음 IMDS(Instance Metadata Service)에서 찾고 있는 정보를 검색하세요. 따라서 위의 예에서 eth1에는 MAC 주소가 있으므로 다음 06:a6:9a:4a:98:c6을 사용하여 공용 IPv4 주소를 얻을 수 있습니다.

curl http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:1d:90:af:65:a3/public-ipv4s

더 많은 정보가 있습니다AWS 설명서

연결 문제와 관련하여 첫 번째 단계로 각 ENI와 연결된 VPC 라우팅, ACL 및 보안 그룹 구성을 다시 확인하십시오. 이러한 세부 정보는 잘못 구성되기 쉽고, 뭔가를 놓칠 경우 트래픽이 중단될 수 있습니다. 먼저 자세한 내용을 확인한 후 돌아와서 이 게시물의 나머지 부분을 읽어보세요. 인스턴스와 연결된 여러 ENI가 있는 경우 특히 발생하는 또 다른 미묘한 문제가 있으며 이것이 문제일 수 있습니다.

AWS VPC는 ​​엄격한 스푸핑 방지 보호 기능을 구현합니다. 이는 어떤 이유로든 인스턴스가 손상된 경우 다양한 형태의 네트워크 공격에 참여하지 않도록 AWS와 고객을 보호하므로 좋은 것입니다. 그러나 여러 ENI를 인스턴스에 연결할 때 고려해야 할 사항입니다.

문제는 기본 라우팅 동작이목적지나가는 패킷의. 이는 인바운드 패킷에 대한 응답이 원래 패킷이 수신된 동일한 인터페이스를 통해 전송되지 않을 수 있음을 의미합니다. 그러나 VPC의 경우 이는 응답 패킷의 소스 주소가 ENI와 연결된 프라이빗 IP 주소와 일치하지 않는다는 점에서 "스푸핑된" 패킷으로 간주됩니다.

다음 인터페이스 구성 및 라우팅 테이블을 고려하십시오.

admin@ip-10-0-0-115:~$ ip -4 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
    altname enp0s5
    inet 10.0.0.115/24 brd 10.0.0.255 scope global dynamic ens5
       valid_lft 2801sec preferred_lft 2801sec
3: ens6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
    altname enp0s6
    inet 10.0.0.8/24 brd 10.0.0.255 scope global dynamic ens6
       valid_lft 2889sec preferred_lft 2889sec


admin@ip-10-0-0-115:~$ ip ro
default via 10.0.0.1 dev ens5
10.0.0.0/24 dev ens5 proto kernel scope link src 10.0.0.115
10.0.0.0/24 dev ens6 proto kernel scope link src 10.0.0.8

이 경우 10.0.0.8은 ens6에 할당된 주소입니다. 이 IP 주소에 대한 인바운드 패킷은 ens6을 통해 수신되어 예상대로 처리됩니다. 그러나 해당 패킷에 대한 아웃바운드 응답은 위의 라우팅 테이블에 따라 라우팅되고 ens5를 통해 송신되며 VPC에 의해 삭제됩니다.

다음과 같이 테스트할 수 있습니다.

admin@ip-10-0-0-115:~$ ip ro get 8.8.8.8 from 10.0.0.8
8.8.8.8 from 10.0.0.8 via 10.0.0.1 dev ens5 uid 1000
    cache

10.0.0.8이 ens6에 할당되어 있어도 장치는 ens5입니다. VPC는 이 트래픽을 삭제합니다!

패킷이 VPC를 통해 전달되도록 하려면 다음을 구현해야 합니다.정책 라우팅. 광범위하게 말하면 정책 라우팅은 시스템이 라우팅 결정을 내리기 위해 대상 이외의 추가 정보를 사용하는 상황을 나타냅니다. 이 경우 소스 IP 주소도 고려해야 합니다. 여기서 해야 할 일은 소스 주소가 10.0.0.8인 모든 나가는 패킷이 ens6을 통해 떠나는지 확인하는 것입니다.

Linux의 정책 라우팅은 일반적으로 명령을 사용하여 구성됩니다 ip(8). 위의 라우팅 테이블이 작동하는 인스턴스를 만들려면 ens6에 특정한 보조 라우팅 테이블을 생성해야 합니다. 보조 테이블 조작은 테이블 ID를 지정한다는 점을 제외하면 '기본' 테이블 조작과 동일하게 작동합니다. 따라서 이 경우 로컬 네트워크에 대한 경로를 추가하고 게이트웨이를 통해 테이블 ​​10000에 대한 기본 경로를 다음과 같이 추가할 수 있습니다.

admin@ip-10-0-0-115:~$ sudo ip ro add 10.0.0.0/24 dev ens6 table 10000
admin@ip-10-0-0-115:~$ sudo ip ro add default via 10.0.0.1 table 10000
admin@ip-10-0-0-115:~$ ip ro show table 10000
default via 10.0.0.1 dev ens6
10.0.0.0/24 dev ens6 scope link

그리고 다음 표에 따라 10.0.0.8에서 나가는 트래픽을 라우팅하는 규칙을 만듭니다.

admin@ip-10-0-0-115:~$ sudo ip rule add from 10.0.0.8/32 table 10000 pref 10000
admin@ip-10-0-0-115:~$ ip rule
0:      from all lookup local
10000:  from 10.0.0.8 lookup 10000
32766:  from all lookup main
32767:  from all lookup default

10.0.0.8의 트래픽이 테이블 10000을 통해 라우팅된다는 것을 보여주는 규칙 10000이 있음을 확인하세요.

우리는 이것을 ip ro get다시 확인할 수 있습니다:

admin@ip-10-0-0-115:~$ ip ro get 8.8.8.8 from 10.0.0.8
8.8.8.8 from 10.0.0.8 via 10.0.0.1 dev ens6 table 10000 uid 1000
    cache

테이블 10000에 따라 라우팅되고 있지만 더 중요한 것은 ens6 장치를 통해 전송된다는 점입니다!

Amazon Linux는 인스턴스에 여러 ENI가 연결된 경우 이와 같은 정책 라우팅 규칙을 자동으로 설정합니다. Ubuntu가 지원하는지 잘 모르겠습니다. 따라서 해당 부분에 대해 약간의 조사를 수행하고 특정 상황에 맞게 자체 자동화를 구현해야 할 수도 있습니다.

관련 정보