Score:2

ไม่สามารถ SSH ไปยังอินเทอร์เฟซเครือข่ายที่สองใน Ubuntu 20.04 บน EC2

ธง br

ฉันมี VPC 10.0.0.0/16 ด้วยอินเทอร์เน็ตเกตเวย์และเครือข่ายย่อยสองเครือข่าย 10.0.100.0/24 และ 10.0.200.0/24 ในเขตความพร้อมใช้งานเดียวกัน อนุญาตกลุ่มความปลอดภัยเดียว tcp/22 ขาเข้าจาก 0.0.0.0/0 และทุกอย่างขาออก ฉันยังมีอินเทอร์เฟซเครือข่ายสองอินเทอร์เฟซที่เชื่อมโยงกับกลุ่มความปลอดภัย หนึ่งอินเทอร์เฟซในแต่ละเครือข่ายย่อย แต่ละอินเทอร์เฟซเครือข่ายมีที่อยู่ IP ยืดหยุ่นของตัวเอง มีตารางเส้นทางสำหรับแต่ละเครือข่ายย่อยที่ชี้ 0.0.0.0/0 ไปยังอินเทอร์เน็ตเกตเวย์

นี่คือปัญหาที่ฉันเผชิญ: ฉันมีอินสแตนซ์ EC2 ที่จับคู่กับอินเทอร์เฟซเครือข่ายทั้งสอง แต่ทำได้เฉพาะ SSH จากอินเทอร์เน็ตผ่านอินสแตนซ์ที่จับคู่กับ eth0.

นี่คือการกำหนดค่า:

$ uname -a
Linux ip-10-0-100-70 5.4.0-1045-aws #47-Ubuntu SMP อังคารที่ 13 เมษายน 07:02:25 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

$ ไอพี
1: จริง: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN กลุ่มเริ่มต้น qlen 1,000
    ลิงค์ / ย้อนกลับ 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 ขอบเขตโฮสต์เลย
       valid_lft ตลอดไป reserved_lft ตลอดไป
    inet6 :: โฮสต์ขอบเขต 1/128 
       valid_lft ตลอดไป reserved_lft ตลอดไป
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc fq_codel สถานะกลุ่ม UP เริ่มต้น qlen 1,000
    ลิงค์/อีเธอร์ 02:88:59:6e:78:c0 brd ff:ff:ff:ff:ff:ff
    inet 10.0.100.70/24 brd 10.0.100.255 ขอบเขต global dynamic eth0
       valid_lft 1806 วินาทีที่ต้องการ_lft 1806 วินาที
    ลิงค์ขอบเขต inet6 fe80::88:59ff:fe6e:78c0/64 
       valid_lft ตลอดไป reserved_lft ตลอดไป
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc fq_codel สถานะกลุ่ม UP เริ่มต้น qlen 1,000
    ลิงค์/อีเธอร์ 02:7d:b2:d4:b5:ea brd ff:ff:ff:ff:ff:ff
    inet 10.0.200.118/24 brd 10.0.200.255 ขอบเขต global dynamic eth1
       valid_lft 1807 วินาทีที่ต้องการ_lft 1807 วินาที
    ลิงค์ขอบเขต inet6 fe80::7d:b2ff:fed4:b5ea/64 
       valid_lft ตลอดไป reserved_lft ตลอดไป

เส้นทาง $ ip
ค่าเริ่มต้นผ่าน 10.0.100.1 dev eth0 proto dhcp src 10.0.100.70 เมตริก 100 
ค่าเริ่มต้นผ่าน 10.0.200.1 dev eth1 proto dhcp src 10.0.200.118 เมตริก 200 
10.0.200.0/24 dev eth1 ลิงก์ขอบเขตเคอร์เนลโปรโต src 10.0.200.118 
10.0.200.1 dev eth1 proto dhcp ขอบเขตลิงก์ src 10.0.200.118 เมตริก 200 
10.0.100.0/24 dev eth0 ลิงก์ขอบเขตเคอร์เนลโปรโต src 10.0.100.70 
10.0.100.1 dev eth0 proto dhcp ขอบเขตลิงก์ src 10.0.100.70 เมตริก 100

$ กฎไอพี
0: จากการค้นหาทั้งหมดในท้องถิ่น
32766: จากหลักการค้นหาทั้งหมด
32767: จากค่าเริ่มต้นการค้นหาทั้งหมด

$ sudo ufw สถานะโดยละเอียด
สถานะ: ไม่ได้ใช้งาน

$ ss -nlput
สถานะ Netid Recv-Q Send-Q ที่อยู่ในระบบ:ที่อยู่พอร์ตเพียร์:กระบวนการพอร์ต   
UDP UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:*                
udp UNCONN 0 0 10.0.200.118%eth1:68 0.0.0.0:*                
udp UNCONN 0 0 10.0.100.70%eth0:68 0.0.0.0:*                
tcp LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:*                
tcp ฟัง 0 128 0.0.0.0:22 0.0.0.0:*                
tcp ฟัง 0 128 [::]:22 [::]:* 

ดังนั้นดูเหมือนว่าอินเทอร์เฟซเครือข่ายได้รับการกำหนดค่าอย่างถูกต้องและ SSH daemon กำลังฟังบนอินเทอร์เฟซทั้งหมด SSH daemon ทำงานได้อย่างถูกต้องเพราะฉันเชื่อมต่อผ่าน SSH แล้ว eth0. และอินเทอร์เฟซทั้งสองดูเหมือนจะส่งทราฟฟิกไปยังอินเทอร์เน็ตได้ดี:

$ ping -I eth0 -c 5 1.1.1.1
PING 1.1.1.1 (1.1.1.1) จาก 10.0.100.70 eth0: 56(84) ไบต์ของข้อมูล
64 ไบต์จาก 1.1.1.1: icmp_seq=1 ttl=38 เวลา=11.5 ms
64 ไบต์จาก 1.1.1.1: icmp_seq=2 ttl=38 เวลา=11.5 ms
64 ไบต์จาก 1.1.1.1: icmp_seq=3 ttl=38 เวลา=11.5 ms
64 ไบต์จาก 1.1.1.1: icmp_seq=4 ttl=38 เวลา=11.6 ms
64 ไบต์จาก 1.1.1.1: icmp_seq=5 ttl=38 เวลา=11.5 ms

--- 1.1.1.1 สถิติการปิง ---
ส่ง 5 แพ็กเก็ต ได้รับ 5 แพ็กเก็ต สูญเสียแพ็กเก็ต 0% เวลา 4007ms
rtt นาที/เฉลี่ย/สูงสุด/mdev = 11.470/11.515/11.567/0.031 มิลลิวินาที

$ ping -I eth1 -c 5 1.1.1.1
PING 1.1.1.1 (1.1.1.1) จาก 10.0.200.118 eth1: 56(84) ไบต์ของข้อมูล
64 ไบต์จาก 1.1.1.1: icmp_seq=1 ttl=38 เวลา=11.7 ms
64 ไบต์จาก 1.1.1.1: icmp_seq=2 ttl=38 เวลา=11.8 ms
64 ไบต์จาก 1.1.1.1: icmp_seq=3 ttl=38 เวลา=11.7 ms
64 ไบต์จาก 1.1.1.1: icmp_seq=4 ttl=38 เวลา=11.8 ms
64 ไบต์จาก 1.1.1.1: icmp_seq=5 ttl=38 เวลา=11.8 ms

--- 1.1.1.1 สถิติการปิง ---
ส่ง 5 แพ็กเก็ต, 5 แพ็กเก็ตที่ได้รับ, การสูญเสียแพ็กเก็ต 0%, เวลา 4008ms
rtt นาที/เฉลี่ย/สูงสุด/mdev = 11.705/11.755/11.829/0.042 มิลลิวินาที

แต่เชื่อมต่อไม่ได้:

$ ssh -i ~/.ssh/cert.pem ubuntu@3.<redacted> # EIP สำหรับ eth0
ยินดีต้อนรับสู่ Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-1045-aws x86_64)
...

$ ssh -i ~/.ssh/cert.pem ubuntu@52.<redacted> # EIP สำหรับ eth1
ssh: เชื่อมต่อกับโฮสต์ 52 <redacted> พอร์ต 22: การดำเนินการหมดเวลา

ฉันตั้งค่า Netflow บน eth1 อะแดปเตอร์เครือข่ายใน AWS และสามารถดูการรับส่งข้อมูล:

2 840416055907 eni-07cc18b6f1b89378e <redacted> 10.0.200.118 54268 22 6 9 576 1623280724 1623280761 ยอมรับ ตกลง

ดังนั้นฉันจึงรู้สึกว่าระบบปฏิบัติการกำลังลดการรับส่งข้อมูล แต่ไม่มีการกำหนดค่าไฟร์วอลล์และ SSH daemon กำลังฟังบนอินเทอร์เฟซทั้งหมด ฉันยังลองใช้ tailing logs /var/log/{syslog,auth.log,kern.log} และ dmesg แต่ไม่มีอะไรปรากฏขึ้นในขณะที่ฉันพยายามเชื่อมต่อ

ฉันหวังว่าฉันจะพลาดอะไรไปง่ายๆ เพราะตอนนี้ฉันกำลังขาดทุนอยู่นิดหน่อย ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมมาก!

A.B avatar
cl flag
A.B
คุณแจ้งว่า "มีเส้นทาง **ตาราง** สำหรับแต่ละเครือข่ายย่อยที่ชี้ `0.0.0.0/0` ไปยังเกตเวย์อินเทอร์เน็ต" . ในการถ่ายโอนข้อมูลการกำหนดค่าเครือข่ายของคุณ ไม่มีตารางเส้นทางเพิ่มเติมใดๆ หรือกฎการกำหนดเส้นทางเพิ่มเติมใดๆ ที่ชี้ไปยังตารางเส้นทางเหล่านี้ คุณช่วยอธิบายความหมายของ "มีตารางเส้นทางสำหรับแต่ละซับเน็ต ... " ได้ไหม ตารางเส้นทางไม่ใช่เส้นทาง (รายการ) และการกลับบ้านหลายหลังที่ถูกต้องต้องใช้ตารางและกฎ
Micah Henning avatar
br flag
ขอบคุณสำหรับการตอบกลับของคุณ @A.B. ตารางเส้นทางถูกกำหนดใน AWS เพื่อให้ทราฟฟิกขาออกจากอินสแตนซ์ EC2 สามารถค้นหาเกตเวย์อินเทอร์เน็ตได้
A.B avatar
cl flag
A.B
เนื่องจาก sshd ไม่มีตัวเลือก -I เช่น ping เพื่อล็อกการกำหนดเส้นทางไปยังอินเทอร์เฟซ ฉันเกรงว่าคุณจะมีปัญหาเกี่ยวกับการกำหนดเส้นทางในอินสแตนซ์ของคุณ เฉพาะเส้นทางเริ่มต้นแรกเท่านั้นที่ใช้งานได้ เส้นทางที่ 2 ไม่มีผลกับ sshd
Score:0
ธง br

การจราจรจาก eth1 ต้องกำหนดค่าเพื่อกำหนดเส้นทางอย่างถูกต้อง:

กฎ $ sudo ip เพิ่มจากค่าเริ่มต้นของตาราง 10.0.200.118
เส้นทาง $ sudo ip เพิ่มค่าเริ่มต้นผ่านค่าเริ่มต้นของตาราง 10.0.200.1 dev eth1
$ sudo ip เส้นทางล้างแคช

เนื่องจากเราไม่ต้องการให้ SSH เข้าสู่อินสแตนซ์ด้วยตนเองเพื่อป้อนคำสั่งเหล่านี้ ฉันจึงสร้างสคริปต์ systemd เพื่อดำเนินการเมื่อเริ่มต้น

/home/ubuntu/dual-home.sh

#!/bin/bash

ADDR=$(ip -f inet addr แสดง eth1 | sed -En -e 's/.*inet ([0-9.]+).*/\1/p')
GATEWAY=$(echo $ADDR | sed -En -e 's/(([0-9]+\.){3}).*/\11/p') # ถือว่าหน้ากาก /24
กฎ sudo ip เพิ่มจากค่าเริ่มต้นของตาราง $ADDR
เส้นทาง sudo ip เพิ่มค่าเริ่มต้นผ่าน $GATEWAY dev eth1 ตารางเริ่มต้น
sudo ip เส้นทางล้างแคช

/etc/systemd/system/dual-home.service

[หน่วย]
คำอธิบาย=กำหนดค่าการกำหนดเส้นทาง eth1
หลังจาก = network.target
After=cloud-final.service

[บริการ]
ประเภท = ง่าย
ExecStart=/bin/bash /home/ubuntu/dual-home.sh

[ติดตั้ง]
WantedBy=cloud-init.target

จากนั้นเปิดใช้บริการ: $ sudo systemctl เปิดใช้งานสองบ้าน

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา