Score:2

การรับส่งข้อมูล VLAN การกำหนดเส้นทางโฮสต์ Linux ไม่สามารถรับหรือสร้างการเชื่อมต่อเครือข่ายได้

ธง bs

ฉันมีระบบ CentOS 7 ที่มีสามอินเทอร์เฟซ ฉันเพิ่ง แปลงหนึ่งในอินเทอร์เฟซเหล่านั้นเป็นการใช้ VLAN เซิร์ฟเวอร์ระบบนี้ เป็นไฟร์วอลล์และเราเตอร์ระหว่างเครือข่ายต่างๆ ทุกอย่าง ดูเหมือนว่าจะทำงานตามที่คาดไว้ ยกเว้นรายการหนึ่ง ฉันไม่สามารถเชื่อมต่อได้ เข้าหรือออกจากระบบ CentOS จาก/ไปยังโฮสต์ใดๆ บน VLAN

ตัวอย่างเช่น ถ้าฉัน ssh จาก 192.168.32.95 (โฮสต์บน VLAN 32) เป็น 192.168.32.1 (อินเทอร์เฟซ VLAN 32 บนโฮสต์ CentOS) ฉันเห็น แพ็กเก็ตที่มี tcpdump มาถึงอินเทอร์เฟซ enp3s0 ซึ่งติดแท็กด้วย vlan 32. บันทึกเชน INPUT ของ iptables และยอมรับแพ็กเก็ต หลังจากนั้นแพ็กเก็ตก็หายไป ไม่มีการส่ง SYN-ACK ไม่มีการส่ง RST

ในทำนองเดียวกัน สำหรับบางอย่างเช่น NTP จาก 192.168.32.1 เป็น 192.168.32.3 ไฟร์วอลล์บันทึกและยอมรับแพ็กเก็ต NTP ขาออก แต่จากนั้นไม่ tcpdump เห็นแพ็กเก็ตออกจาก enp3s0 (เช่น enp3s0.32)

Pings จาก VLAN 32 ทำงาน... ฉันสามารถ ping โฮสต์ CentOS จาก VLAN 32 และ รับคำตอบ

ระบบ CentOS กำลังส่งต่อแพ็กเก็ตระหว่างชุดค่าผสมทั้งหมด อินเทอร์เฟซ VLAN และไม่ใช่ VLAN

ความคิดใด ๆ ที่อาจอธิบายถึงปัญหาการเชื่อมต่อเหล่านี้ หรือ แม้กระทั่งวิธีการติดตามสิ่งที่เกิดขึ้นต่อไป?

# แสดง ip addr
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 ตลอดไป
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP กลุ่มเริ่มต้น qlen 1000
    ลิงค์/อีเธอร์ c0:25:e9:0e:cb:a1 brd ff:ff:ff:ff:ff:ff
    inet 10.20.30.177/28 brd 10.20.30.191 ขอบเขตทั่วโลก enp1s0
       valid_lft ตลอดไป reserved_lft ตลอดไป
3: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP กลุ่มเริ่มต้น qlen 1000
    ลิงค์/อีเธอร์ 84:16:f9:05:3a:fb brd ff:ff:ff:ff:ff:ff
    inet 192.168.16.1/24 brd 192.168.16.255 ขอบเขต global enp2s0
       valid_lft ตลอดไป reserved_lft ตลอดไป
4: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP กลุ่มเริ่มต้น qlen 1000
    ลิงค์/อีเธอร์ 6c:f0:49:42:5b:fa brd ff:ff:ff:ff:ff:ff
5: enp3s0.32@enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP กลุ่มเริ่มต้น qlen 1000
    ลิงค์/อีเธอร์ 6c:f0:49:42:5b:fa brd ff:ff:ff:ff:ff:ff
    inet 192.168.32.1/24 brd 192.168.32.255 ขอบเขตทั่วโลก enp3s0.32
       valid_lft ตลอดไป reserved_lft ตลอดไป
6: enp3s0.50@enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP กลุ่มเริ่มต้น qlen 1000
    ลิงค์/อีเธอร์ 6c:f0:49:42:5b:fa brd ff:ff:ff:ff:ff:ff
    inet 192.168.50.1/24 brd 192.168.50.255 ขอบเขตทั่วโลก enp3s0.50
       valid_lft ตลอดไป reserved_lft ตลอดไป

นี่คือห่วงโซ่ INPUT ที่ฉันใส่กฎการบันทึกและยอมรับไว้ที่ จุดเริ่มต้น.

# iptables -t กรอง -S อินพุต
-P อินพุตลดลง
-A อินพุต -i lo -j ยอมรับ
-A INPUT -m state --สถานะที่เกี่ยวข้อง,ESTABLISHED -j ACCEPT
-อินพุต -s 192.168.32.95/32 -d 192.168.32.1/32 -p tcp -m tcp --dport 22 -j LOG --log-คำนำหน้า "ทดสอบใน:"
-A อินพุต -s 192.168.32.95/32 -d 192.168.32.1/32 -p tcp -m tcp --dport 22 -j ยอมรับ
-A INPUT -m state --state ไม่ถูกต้อง -j ไม่ถูกต้อง
-A INPUT -m state --state ไม่ถูกติดตาม -j ไม่ถูกติดตาม
-A INPUT -i enp1s0 -j ​​INPUT-EXT
-A อินพุต -i enp2s0 -j ​​อินพุต-MID
-A อินพุต -i enp3s0.32 -j INPUT-V32
-A อินพุต -i enp3s0.50 -j INPUT-V50
-A INPUT -j LOG --log-คำนำหน้า "DROP EOC INPUT: " --log-tcp-options --log-ip-options
-A อินพุต -j DROP

ไฟร์วอลล์จะบันทึกแพ็คเก็ต SYN

4 กรกฎาคม 14:21:49 เคอร์เนลภายนอก: [112380.489332] ทดสอบใน: IN=enp3s0.32 OUT= MAC=6c:f0:49:42:5b:fa:52:54:00:35:f4:e4:08 :00:45:00:00:3c SRC=192.168.32.95 DST=192.168.32.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=17731 DF PROTO=TCP SPT=51926 DPT=22 WINDOW=29200 RES= 0x00 SYN URGP=0

ผลลัพธ์ของ tcpdump แสดงหลายชุดของแพ็กเก็ต SYN ที่มาถึง

# tcpdump -e -nn -i enp3s0 โฮสต์ 192.168.32.95 และโฮสต์ 192.168.32.1
14:21:49.516122 52:54:00:35:f4:e4 > 6c:f0:49:42:5b:fa, ethertype 802.1Q (0x8100), ความยาว 78: vlan 32, p 0, ethertype IPv4, 192.168 32.95.51926 > 192.168.32.1.22: ค่าสถานะ [S], seq 3631520692, ชนะ 29200, ตัวเลือก [mss 1460,sackOK,TS val 69303507 ecr 0,nop,wscale 7], ความยาว 0
14:21:50.529043 52:54:00:35:f4:e4 > 6c:f0:49:42:5b:fa, ethertype 802.1Q (0x8100), ความยาว 78: vlan 32, p 0, ethertype IPv4, 192.168 32.95.51926 > 192.168.32.1.22: ค่าสถานะ [S], seq 3631520692, ชนะ 29200, ตัวเลือก [mss 1460,sackOK,TS val 69303760 ecr 0,nop,wscale 7], ความยาว 0
14:21:52.543926 52:54:00:35:f4:e4 > 6c:f0:49:42:5b:fa, ethertype 802.1Q (0x8100), ความยาว 78: vlan 32, p 0, ethertype IPv4, 192.168 32.95.51926 > 192.168.32.1.22: ค่าสถานะ [S], seq 3631520692, ชนะ 29200, ตัวเลือก [mss 1460,sackOK,TS val 69304264 ecr 0,nop,wscale 7], ความยาว 0
14:21:56.607938 52:54:00:35:f4:e4 > 6c:f0:49:42:5b:fa, ethertype 802.1Q (0x8100), ความยาว 78: vlan 32, p 0, ethertype IPv4, 192.168 32.95.51926 > 192.168.32.1.22: ค่าสถานะ [S], seq 3631520692, ชนะ 29200, ตัวเลือก [mss 1460,sackOK,TS val 69305280 ecr 0,nop,wscale 7], ความยาว 0
14:22:04.799936 52:54:00:35:f4:e4 > 6c:f0:49:42:5b:fa, ethertype 802.1Q (0x8100), ความยาว 78: vlan 32, p 0, ethertype IPv4, 192.168 32.95.51926 > 192.168.32.1.22: ค่าสถานะ [S], seq 3631520692, ชนะ 29200, ตัวเลือก [mss 1460,sackOK,TS val 69307328 ecr 0,nop,wscale 7], ความยาว 0

ข้อมูลที่ต้องการเพิ่มเติม:

# เส้นทางไอพี
เริ่มต้นผ่าน 50.196.138.190 dev enp1s0
10.20.30.176/28 dev enp1s0 ลิงก์ขอบเขตเคอร์เนลโปรโต src 10.20.30.177
192.168.16.0/24 dev enp2s0 ลิงก์ขอบเขตเคอร์เนลโปรโต src 192.168.16.1
192.168.32.0/24 dev enp3s0.32 ลิงก์ขอบเขตเคอร์เนลโปรโต src 192.168.32.1
192.168.50.0/24 dev enp3s0.50 ลิงก์ขอบเขตเคอร์เนลโปรโต src 192.168.50.1
#กฎไอพี
0: จากการค้นหาทั้งหมดในท้องถิ่น
32766: จากหลักการค้นหาทั้งหมด
32767: จากค่าเริ่มต้นการค้นหาทั้งหมด
# ตารางแสดงเส้นทาง ip ในพื้นที่
ออกอากาศ 10.20.30.176 dev enp1s0 proto kernel scope link src 10.20.30.177
ท้องถิ่น 10.20.30.177 dev enp1s0 โปรโตเคอร์เนลขอบเขตโฮสต์ src 10.20.30.177
ออกอากาศ 10.20.30.191 dev enp1s0 ลิงก์ขอบเขตเคอร์เนลโปรโต src 10.20.30.177
ออกอากาศ 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
ท้องถิ่น 127.0.0.0/8 dev จริง ขอบเขตเคอร์เนลโปรโต โฮสต์ src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
ออกอากาศ 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
ออกอากาศ 192.168.16.0 dev enp2s0 ลิงก์ขอบเขตเคอร์เนลโปรโต src 192.168.16.1
ท้องถิ่น 192.168.16.1 dev enp2s0 โปรโตเคอร์เนลขอบเขตโฮสต์ src 192.168.16.1
ออกอากาศ 192.168.16.255 dev enp2s0 ลิงก์ขอบเขตเคอร์เนลโปรโต src 192.168.16.1
ออกอากาศ 192.168.32.0 dev enp3s0.32 ลิงก์ขอบเขตเคอร์เนลโปรโต src 192.168.32.1
ท้องถิ่น 192.168.32.1 dev enp3s0.32 โปรโตเคอร์เนลขอบเขตโฮสต์ src 192.168.32.1
ออกอากาศ 192.168.32.255 dev enp3s0.32 ลิงก์ขอบเขตเคอร์เนลโปรโต src 192.168.32.1
ออกอากาศ 192.168.50.0 dev enp3s0.50 ลิงก์ขอบเขตเคอร์เนลโปรโต src 192.168.50.1
ท้องถิ่น 192.168.50.1 dev enp3s0.50 โปรโตเคอร์เนลขอบเขตโฮสต์ src 192.168.50.1
ออกอากาศ 192.168.50.255 dev enp3s0.50 ลิงก์ขอบเขตเคอร์เนลโปรโต src 192.168.50.1

ฉันได้เพิ่มการบันทึกและกฎ ACCEPT เฉพาะในเชน OUTPUT แล้ว แต่ไม่เคยบันทึกอะไรได้เลย

# iptables -S เอาต์พุต
-P เอาต์พุตลดลง
-A OUTPUT -o lo -j ยอมรับ
-A OUTPUT -m state --สถานะที่เกี่ยวข้อง,ESTABLISHED -j ACCEPT
-A OUTPUT -s 192.168.32.1/32 -d 192.168.32.95/32 -p tcp -m tcp --sport 22 -j LOG --log-คำนำหน้า "TEST OUT:"
-A OUTPUT -s 192.168.32.1/32 -d 192.168.32.95/32 -p tcp -m tcp --sport 22 -j ยอมรับ
-A OUTPUT -m state --state ไม่ถูกต้อง -j ไม่ถูกต้อง
-A OUTPUT -m state --state ไม่ถูกติดตาม -j ไม่ถูกติดตาม
-A OUTPUT -o enp1s0 -j ​​OUTPUT-EXT
-A OUTPUT -o enp2s0 -j ​​OUTPUT-MID
-A OUTPUT -o enp3s0.32 -j OUTPUT-V32
-A OUTPUT -o enp3s0.50 -j OUTPUT-V50
-A OUTPUT -j LOG --log-prefix "DROP EOC OUTPUT: " --log-tcp-options --log-ip-options
-A OUTPUT -j ลดลง
# ss -atn
สถานะ Recv-Q Send-Q ที่อยู่ในระบบ:พอร์ตเพียร์ ที่อยู่:พอร์ต
ฟัง 0 128 127.0.0.1:199 *:*
ฟัง 0 128 *:22 *:*
SYN-RECV 0 0 192.168.32.1%if378475780:22 192.168.32.95:36778
ฟัง 0 100 127.0.0.1:25 *:*
ESTAB 0 292 192.168.16.1:22 192.168.16.61:49618

# cat /etc/sysconfig/network-scripts/ifcfg-enp3s0.32
อุปกรณ์=enp3s0.32
TYPE=อีเธอร์เน็ต
ONBOOT=ใช่
VLAN=ใช่
BOOTPROTO=คงที่
IPADDR=192.168.32.1
NETMASK=255.255.255.0
IPV6INIT=ไม่มี

# cat /etc/sysconfig/network-scripts/ifcfg-enp3s0
อุปกรณ์=enp3s0
TYPE=อีเธอร์เน็ต
ONBOOT=ใช่
BOOTPROTO=คงที่
IPV6INIT=ไม่มี

นี่คือความพยายามสามครั้งในการ ssh ในโฮสต์นี้ แต่ละรายการด้านล่างเป็นรายการหลังจาก ssh ก่อนหน้าออกจากการเชื่อมต่อโดยหมดเวลา และหลังจาก SYN-RECV ก่อนหน้าหายไป ฉันลบบรรทัด LISTEN และ ESTAB ออกจาก out เนื่องจากโดยพื้นฐานแล้วมันเหมือนกันกับเอาต์พุตก่อนหน้า อีกทั้ง บรรทัด SYN-RECV ว่างเปล่าในคอลัมน์กระบวนการ

# ss -atnp
สถานะ Recv-Q Send-Q ที่อยู่ในระบบ:พอร์ตเพียร์ ที่อยู่:พอร์ต
SYN-RECV 0 0 192.168.32.1%if-8096:22 192.168.32.95:47290

# ss -atnp
สถานะ Recv-Q Send-Q ที่อยู่ในระบบ:พอร์ตเพียร์ ที่อยู่:พอร์ต
SYN-RECV 0 0 192.168.32.1%if378479604:22 192.168.32.95:47440

# ss -atnp
สถานะ Recv-Q Send-Q ที่อยู่ในระบบ:พอร์ตเพียร์ ที่อยู่:พอร์ต
SYN-RECV 0 0 192.168.32.1%if378479648:22 192.168.32.95:47580

การทดลองอื่น ฉันลองเริ่มการเชื่อมต่อ ssh หลายรายการ ห่างกัน 1 วินาที:

สำหรับ x ใน 1 2 3 4 5 6 7 8 9 10 ; ทำ ssh -n 192.168.32.1 วันที่ & นอน 1; เสร็จแล้ว

และหลังจากกระบวนการ ssh ทั้งหมดทำงาน ผลลัพธ์ ss จะเป็นดังนี้ ไม่มีรายงานแพ็กเก็ต SYN-ACK โดย tcpdump เอาต์พุต ss ยังคงเหมือนเดิมจนกว่าการเชื่อมต่อจะหมดเวลา

# ss -atn
สถานะ Recv-Q Send-Q ที่อยู่ในระบบ:พอร์ตเพียร์ ที่อยู่:พอร์ต
SYN-RECV 0 0 192.168.32.1%if378480635:22 192.168.32.95:50492
SYN-RECV 0 0 192.168.32.1%if378480636:22 192.168.32.95:50502
SYN-RECV 0 0 192.168.32.1%if378480636:22 192.168.32.95:50498
SYN-RECV 0 0 192.168.32.1%if378480635:22 192.168.32.95:50494
SYN-RECV 0 0 192.168.32.1:22 192.168.32.95:50488
SYN-RECV 0 0 192.168.32.1%if378480634:22 192.168.32.95:50486
SYN-RECV 0 0 192.168.32.1%if378480634:22 192.168.32.95:50490
SYN-RECV 0 0 192.168.32.1:22 192.168.32.95:50504
SYN-RECV 0 0 192.168.32.1%if378480636:22 192.168.32.95:50496
SYN-RECV 0 0 192.168.32.1%if378480636:22 192.168.32.95:50500

การตั้งค่าระบบเป็นการกำหนดค่าที่ค่อนข้างมาตรฐาน ก่อนการเปลี่ยนแปลงล่าสุด อินเทอร์เฟซ enp3s0 เป็นเครือข่าย 192.168.32.0/24 การเปลี่ยนแปลงจริงเพียงอย่างเดียวคือไฟล์ ifcfg-enp3s0* ภายใต้ sysconfig และการอัปเดตกฎไฟร์วอลล์ โฮสต์ส่วนใหญ่ย้ายไม่เปลี่ยนแปลงจากซับเน็ตเก่าเป็น vlan 32

A.B avatar
cl flag
A.B
คุณสามารถระบุเส้นทางได้หรือไม่? `เส้นทาง ip; กฎ ip`? และกฎ iptables ขาออก (ตัวกรอง / เอาต์พุต ฯลฯ ) เมื่อรัน `ss -atn | grep ^SYN` หลายครั้ง มี SYN-RECV ใด ๆ ในเวลาที่บันทึกเกิดขึ้นหรือไม่
A.B avatar
cl flag
A.B
1/ อินพุตทำงาน SYN-RECV หมายถึงได้รับ SYN แล้ว ปัญหาอยู่ที่เอาต์พุต 2/ อินเทอร์เฟซ `if378475780` คืออะไร เหตุใดจึงไม่มีอยู่ในเอาต์พุตของ `ip addr show` และทำไมมันถึงใช้เลย? มันไม่ได้อธิบายไว้ที่ใด คุณใช้กลไก LD_PRELOAD บน sshd หรือไม่ ฉันไม่คิดว่ามันมีตัวเลือกในการผูกกับอุปกรณ์ (SO_BINDTODEVICE) นั่นเป็นกระบวนการ sshd เดียวกันหรือไม่ ลองอีกครั้ง `ss` แต่เพิ่มตัวเลือก `-p` ด้วย แน่นอน เพิ่มข้อมูลที่เป็นประโยชน์ทั้งหมดที่คุณดูเหมือนจะละเว้น
A.B avatar
cl flag
A.B
ฉันประหลาดใจมากกับผลลัพธ์ของคำสั่ง `ss` แต่ฉันไม่สามารถอธิบายได้... ขออภัย
djdomi avatar
za flag
ฉันอ่านหน้านี้ทุกวันและทุกวันฉันเรียนรู้คำสั่งเพิ่มเติมมากมายสำหรับตัวฉันเองที่เป็นประโยชน์ +1 สำหรับคำแนะนำ ss แม้จะเป็นคำที่ไม่ดีก็ตาม :)

โพสต์คำตอบ

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