Score:-1

เหตุใดการตั้งค่าเส้นทางนี้จึงไม่ทำงาน

ธง cn

ฉันมีสองอินเทอร์เฟซบนเครื่องเซิร์ฟเวอร์ ผลลัพธ์ของ เส้นทางไอพี ต่อไป:

ค่าเริ่มต้นผ่าน 192.168.100.1 dev enp1s0 proto static metric 100
10.8.0.0/24 dev tap0 ลิงก์ขอบเขตเคอร์เนลโปรโต src 10.8.0.1
192.168.100.0/24 dev enp1s0 โปรโตเคอร์เนลขอบเขตลิงก์ src 192.168.100.201 เมตริก 100

และ ที่อยู่ IP ถัดไป (MAC ถูกซ่อนไว้):

...
1: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP กลุ่มเริ่มต้น qlen 1000
    ลิงค์/อีเธอร์ **:**:**:**:**:** brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.201/24 brd 192.168.100.255 ขอบเขตทั่วโลก noprefixroute enp1s0
       valid_lft ตลอดไป reserved_lft ตลอดไป
    inet6 fe80::1409:66c6:eb0d:22a1/64 ลิงค์ขอบเขต noprefixroute
       valid_lft ตลอดไป reserved_lft ตลอดไป
2: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN กลุ่มเริ่มต้น qlen 100
    ลิงค์/อีเธอร์ **:**:**:**:**:** brd ff:ff:ff:ff:ff:ff
    inet 10.8.0.1/24 brd 10.8.0.255 ขอบเขต tap0 ทั่วโลก
       valid_lft ตลอดไป reserved_lft ตลอดไป
    inet6 fe80::85:5fff:fe98:6cb7/64 ลิงค์ขอบเขต
       valid_lft ตลอดไป reserved_lft ตลอดไป

เดอะ /proc/sys/net/ipv4/ip_forward ค่าคือ 1; ไฟร์วอลล์ถูกปิดใช้งาน

ที่ฉันต้องการคือการเข้าถึง 192.168.100.1 จาก 10.8.0.100. เข้าถึงเว็บเซิร์ฟเวอร์ (ซึ่งกำลังฟังทุกพอร์ตในเครื่องนี้) ผ่าน ขด -- อินเทอร์เฟซ 10.8.0.100 http://10.8.0.1 ทำงานได้ดี แต่ ขด - อินเทอร์เฟซ 10.8.0.100 http://192.168.100.201 ผลลัพธ์คือ ไม่สามารถเข้าถึงเครือข่ายได้.

Curl เริ่มต้นการจับมือ tcp และพุชแพ็กเก็ตไปที่ 10.8.0.100 อินเตอร์เฟซ. จากนั้นแพ็กเก็ตจะไปถึงเครื่องเซิร์ฟเวอร์ 10.8.0.1. เซิร์ฟเวอร์ตรวจสอบจุดปลายทางของแพ็กเก็ตและเห็นว่าเป็นเช่นนั้น 192.168.100.201. จากนั้นดูที่ routing table แล้วจะเห็นว่า 192.168.100.201 เป็นแบบท้องถิ่น ตอนนี้คำตอบกำลังจะกลับมาแล้ว ผู้ส่งคือ 10.8.0.100. ดูที่ตารางเส้นทางเราพบว่าสามารถเข้าถึงได้ผ่าน แตะ 0ซึ่งเป็นของท้องถิ่น ตอนนี้ก็เลยรุกเข้าไป แตะ 0 และมาถึง 10.8.0.100

แต่จริงๆแล้ว— มันไม่ใช่. นี่เป็นเพราะความคิดของฉันผิดหรือเปล่า? ฉันคิดว่าข้อมูลที่ให้ไว้ในตารางที่อธิบายนั้นเพียงพอที่จะกำหนดวิธีการส่งต่อแพ็กเก็ต สิ่งนี้ไม่สมบูรณ์จริงหรือ

Score:1
ธง np

ก่อนอื่น ให้ระบุที่อยู่ IP และส่วนต่อประสานกับพารามิเตอร์ -I ให้กับ ปิง ไม่ใช่คำพ้องความหมาย บอกก่อนว่า IP ต้นทาง ที่จะเลือก. มันจะกำหนดเส้นทางตามการไหลของเน็ต รวมถึงที่อยู่ในท้องถิ่นและตารางเส้นทาง ประการที่สองบอกให้เลือกอินเทอร์เฟซโดยตรงเพื่อส่งแพ็กเก็ตไปยัง (และจะเลือก IP ที่กำหนดเป็นอันดับแรกเป็นแหล่งที่มา)

ต่อไปสิ่งที่คุณทำไม่เกี่ยวข้องกับการส่งต่อแพ็กเก็ต การส่งต่อหมายความว่าแพ็กเก็ตต้องมาจาก "ภายนอก" จริงๆ ขณะที่คุณกำลังสร้างแพ็กเก็ตจากโฮสต์นี้ จะไม่มีการส่งต่อที่เกี่ยวข้อง มันเป็นแพ็กเก็ตที่สร้างขึ้นในเครื่อง เนื่องจาก IP ปลายทางของคุณเป็นหนึ่งในที่อยู่ที่กำหนดในเครื่อง เมื่อคุณไม่ได้บังคับให้ ping ส่งแพ็กเก็ตไปยังอินเทอร์เฟซเฉพาะ "นอก" (ด้วย -I อินเตอร์เฟซ ตัวเลือก) เคอร์เนลจะประมวลผลการไหลของแพ็กเก็ตนี้เป็นการภายใน มันจะไม่พยายามส่งออกไปยังอินเทอร์เฟซจริงเนื่องจากปลายทางนั้น "อยู่ที่นี่แล้ว" นี่คือสิ่งที่เกิดขึ้นและเหตุใดจึงใช้ได้ผลในกรณีหนึ่งและไม่ใช่ในอีกกรณีหนึ่ง

PS: นอกจากนี้ตรวจสอบ -ร ตัวเลือกของ ปิง เครื่องมือในกรณีที่คุณรู้ว่าคุณกำลังทำอยู่และอินเทอร์เฟซทั้งสองแนบกับโดเมนการออกอากาศเดียวกัน (ฉันสงสัยสิ่งนี้ด้วยอินเทอร์เฟซ TAP)

Maxim Khokhryakov avatar
cn flag
ที่ฉันต้องการจริงๆคือการเข้าถึง `192.168.100.1` จาก `10.8.0.100` ดังนั้นเส้นทางจะเป็นถัดไป: 10.8.0.100 --ip--> 10.8.0.1 --kernel-->192.168.100.201-->ip --> 192.168.100.1.
np flag
จากนั้น คุณต้องเพิ่มเส้นทางบน `10.8.0.100` ไปยัง `192.168.100.0/24` ถึง `10.8.0.1` (เราเตอร์ของคุณ) และเส้นทางย้อนกลับที่คล้ายกันบน `192.168.100.1` และ ping จากที่นั่น (`10.8.0.100`) ที่คุณพยายามทำตอนนี้คือการ ping เราเตอร์จากเราเตอร์
Maxim Khokhryakov avatar
cn flag
ปัญหาคือฉันไม่สามารถเพิ่มเส้นทางใด ๆ ใน 192.168.100.1 และปัญหาที่สำคัญกว่านั้นคือฉันไม่เข้าใจว่าทำไมการกำหนดค่านี้ถึงไม่ทำงาน ลองใช้คำสั่งนี้ใน 10.8.0.100: `ping -I 10.8.0.100 192.168.100.201` สิ่งนี้ควรสร้างแพ็กเก็ต ICMP พุชไปยังอินเทอร์เฟซ 10.8.0.100 และส่งไปยัง 10.8.0.1 10.8.0.1 ควรส่งต่อไปยัง 192.168.100.201 (เพราะทั้งคู่อยู่ในเครื่องเดียวกัน) แต่มันไม่ใช่! `ping -I 10.8.0.100 10.8.0.1` ใช้งานได้ดี ดังนั้นปัญหาจึงอยู่ระหว่าง 10.8.0.1 และ 192.168.100.201 เช่น ในตารางเส้นทาง
np flag
@MaximKhokhryakov `10.8.0.100` มี `10.8.0.1` เป็นเส้นทางเริ่มต้นหรือไม่ คุณไม่ได้กล่าวถึงมัน "10.8.0.1 ควรส่งต่อไปยัง 192.168.100.201 (เพราะทั้งคู่อยู่ในเครื่องเดียวกัน)" - มันไม่ใช่การส่งต่ออย่างที่ฉันบอกไปแล้ว ปัญหาคือแพ็กเก็ตเข้าถึงเครื่องบนอินเทอร์เฟซ `tap0` ในขณะที่ IP ปลายทางอยู่ที่ `enp1s0` เป็นไปได้มากที่เคอร์เนลจะทิ้งแพ็กเก็ตเหล่านั้นเนื่องจาก `rp_filter` ลองปิดการใช้งานโดยทำ `sysctl -w 'net.ipv4.conf.all.rp_filter=0'`
np flag
@MaximKhokhryakov ด้วย `192.168.100.1` มี `192.168.100.201` อยู่ในรายการเป็นเกตเวย์หรือไม่ ถ้าไม่ คุณต้องกำหนดค่า NAT บน `192.168.100.201` มิฉะนั้นคุณจะไม่สามารถเข้าถึง `192.168.100.1` จาก `10.8.0.1` ในตอนแรก คุณจะไม่ทราบวิธีกำหนดเส้นทางแพ็กเก็ตกลับไปที่ 10.8 .0.0/24.
np flag
นอกจากนี้ คุณสามารถลองทำ `ping -r -I 10.8.0.100 192.168.100.201` จาก `10.8.0.100`
Score:0
ธง cn

ปัญหาเกิดจากความเข้าใจผิดในความแตกต่างระหว่าง --อินเตอร์เฟสไอพี และ --พัฒนาอินเตอร์เฟส. อันแรกใช้ตารางเส้นทาง:

กับ --อินเทอร์เฟซ 10.8.0.100 แพ็คเก็ตจะไม่ถูกส่งต่อไปยัง แตะ 0 อินเทอร์เฟซ (ซึ่ง ip นี้เป็นของ) ตามตารางเส้นทางจะถูกส่งต่อไปยัง 192.168.100.58 (อินเตอร์เฟสแลน). ดังนั้นเส้นทางคือ 10.8.0.100 -> 192.168.100.58 -> 192.168.100.201. แม้ว่าจะมีการส่งมอบ SYN แต่เซิร์ฟเวอร์จะไม่ตอบสนองด้วย SYN-ACK แปลก ๆ นั่นคือเหตุผลที่ทำให้ curl ล้มเหลว

โดยใช้ --อินเทอร์เฟซ tap0 เช่นที่อยู่เลเยอร์ลิงก์จะทำงานตามที่ตั้งใจไว้: 10.8.0.100 -> 10.8.0.1 -> 192.168.100.201. SYN-ACK จะถูกส่งกลับโดยใช้เส้นทางเดิม

โพสต์คำตอบ

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