ฉันมีระบบ 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