NGINX SSL ไม่ตอบสนองผ่าน IPv6


10

บนเซิร์ฟเวอร์ Debian ที่มี nginx ฉันไม่ได้รับการตอบกลับจากเว็บเซิร์ฟเวอร์ผ่าน HTTPS และ IPv6 HTTP ใช้งานได้ดี

  • netstat รายงานพอร์ต 443 ที่ฟังที่อยู่ IPv6
  • ไฟร์วอลล์เปิดอยู่ ipv6scanner.com รายงานพอร์ต 443 ที่เปิดอยู่
  • ภายใน (ผ่านเทอร์มินัล) wget และ curl ได้รับการตอบสนองที่ถูกต้องดังนั้นการกำหนดค่า nginx ก็โอเค
  • ไม่มีสัญญาณของข้อผิดพลาดจาก nginx error.log
  • ไม่มีการบันทึกใน access.log เมื่อล้มเหลวดังนั้นการสื่อสารอาจไม่ถึงเว็บเซิร์ฟเวอร์
  • DNS ไม่เป็นไร การแปลใช้งานได้และการเชื่อมต่อไม่ทำงานแม้จะเข้าถึงที่อยู่ IP โดยตรง

ทุกความพยายามในการเชื่อมต่อจาก "ภายนอก" (หมายถึงนอกเครือข่ายจากอินเทอร์เน็ต) ล้มเหลว (เว็บเบราว์เซอร์, telnet, ipv6-test.com, curl ... ) ไม่มีการตอบสนองเลย

สามารถทดสอบได้ที่ www.ekasparova.eu ฉันไร้เดียงสา ฉันจะตรวจสอบอะไรอีก

แก้ไข:

ผลลัพธ์ของtraceroute6 --mtu www.google.comจะเป็นดังนี้:

traceroute to www.google.com (2a00:1450:4014:800::2004), 30 hops max, 65000 byte packets
1  * F=1500 * *
2  * * *
~
30  * * *

ดังนั้นมันจะไม่ถึงจุดสิ้นสุด ...

edit2:

เอาท์พุท ip6tables- บันทึกของฉัน (ไฟร์วอลล์ท้องถิ่น):

# Generated by ip6tables-save v1.6.0 on Wed Oct 17 06:25:40 2018
*filter
:INPUT DROP [32:9320]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:ufw6-after-forward - [0:0]
:ufw6-after-input - [0:0]
:ufw6-after-logging-forward - [0:0]
:ufw6-after-logging-input - [0:0]
:ufw6-after-logging-output - [0:0]
:ufw6-after-output - [0:0]
:ufw6-before-forward - [0:0]
:ufw6-before-input - [0:0]
:ufw6-before-logging-forward - [0:0]
:ufw6-before-logging-input - [0:0]
:ufw6-before-logging-output - [0:0]
:ufw6-before-output - [0:0]
:ufw6-logging-allow - [0:0]
:ufw6-logging-deny - [0:0]
:ufw6-reject-forward - [0:0]
:ufw6-reject-input - [0:0]
:ufw6-reject-output - [0:0]
:ufw6-skip-to-policy-forward - [0:0]
:ufw6-skip-to-policy-input - [0:0]
:ufw6-skip-to-policy-output - [0:0]
:ufw6-track-forward - [0:0]
:ufw6-track-input - [0:0]
:ufw6-track-output - [0:0]
:ufw6-user-forward - [0:0]
:ufw6-user-input - [0:0]
:ufw6-user-limit - [0:0]
:ufw6-user-limit-accept - [0:0]
:ufw6-user-logging-forward - [0:0]
:ufw6-user-logging-input - [0:0]
:ufw6-user-logging-output - [0:0]
:ufw6-user-output - [0:0]
-A INPUT -j ufw6-before-logging-input
-A INPUT -j ufw6-before-input
-A INPUT -j ufw6-after-input
-A INPUT -j ufw6-after-logging-input
-A INPUT -j ufw6-reject-input
-A INPUT -j ufw6-track-input
-A INPUT -j LOG --log-prefix "[IPTABLES] " --log-tcp-options
-A INPUT -j LOG --log-prefix "[IPTABLES] " --log-tcp-options
-A FORWARD -j ufw6-before-logging-forward
-A FORWARD -j ufw6-before-forward
-A FORWARD -j ufw6-after-forward
-A FORWARD -j ufw6-after-logging-forward
-A FORWARD -j ufw6-reject-forward
-A FORWARD -j ufw6-track-forward
-A FORWARD -j LOG --log-prefix "[IPTABLES] " --log-tcp-options
-A FORWARD -j LOG --log-prefix "[IPTABLES] " --log-tcp-options
-A OUTPUT -j ufw6-before-logging-output
-A OUTPUT -j ufw6-before-output
-A OUTPUT -j ufw6-after-output
-A OUTPUT -j ufw6-after-logging-output
-A OUTPUT -j ufw6-reject-output
-A OUTPUT -j ufw6-track-output
-A ufw6-after-input -p udp -m udp --dport 137 -j ufw6-skip-to-policy-input
-A ufw6-after-input -p udp -m udp --dport 138 -j ufw6-skip-to-policy-input
-A ufw6-after-input -p tcp -m tcp --dport 139 -j ufw6-skip-to-policy-input
-A ufw6-after-input -p tcp -m tcp --dport 445 -j ufw6-skip-to-policy-input
-A ufw6-after-input -p udp -m udp --dport 546 -j ufw6-skip-to-policy-input
-A ufw6-after-input -p udp -m udp --dport 547 -j ufw6-skip-to-policy-input
-A ufw6-after-logging-forward -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw6-after-logging-input -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw6-before-forward -m rt --rt-type 0 -j DROP
-A ufw6-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw6-before-forward -p ipv6-icmp -m icmp6 --icmpv6-type 1 -j ACCEPT
-A ufw6-before-forward -p ipv6-icmp -m icmp6 --icmpv6-type 2 -j ACCEPT
-A ufw6-before-forward -p ipv6-icmp -m icmp6 --icmpv6-type 3 -j ACCEPT
-A ufw6-before-forward -p ipv6-icmp -m icmp6 --icmpv6-type 4 -j ACCEPT
-A ufw6-before-forward -p ipv6-icmp -m icmp6 --icmpv6-type 128 -j ACCEPT
-A ufw6-before-forward -p ipv6-icmp -m icmp6 --icmpv6-type 129 -j ACCEPT
-A ufw6-before-forward -j ufw6-user-forward
-A ufw6-before-input -i lo -j ACCEPT
-A ufw6-before-input -m rt --rt-type 0 -j DROP
-A ufw6-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw6-before-input -m conntrack --ctstate INVALID -j ufw6-logging-deny
-A ufw6-before-input -m conntrack --ctstate INVALID -j DROP
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 1 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 2 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 3 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 4 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 128 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 129 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 133 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 134 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 135 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 136 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 141 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 142 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 130 -j ACCEPT
-A ufw6-before-input -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 131 -j ACCEPT
-A ufw6-before-input -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 132 -j ACCEPT
-A ufw6-before-input -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 143 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 148 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 149 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 151 -m hl --hl-eq 1 -j ACCEPT
-A ufw6-before-input -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 152 -m hl --hl-eq 1 -j ACCEPT
-A ufw6-before-input -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 153 -m hl --hl-eq 1 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 144 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 145 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 146 -j ACCEPT
-A ufw6-before-input -p ipv6-icmp -m icmp6 --icmpv6-type 147 -j ACCEPT
-A ufw6-before-input -s fe80::/10 -d fe80::/10 -p udp -m udp --sport 547 --dport 546 -j ACCEPT
-A ufw6-before-input -d ff02::fb/128 -p udp -m udp --dport 5353 -j ACCEPT
-A ufw6-before-input -d ff02::f/128 -p udp -m udp --dport 1900 -j ACCEPT
-A ufw6-before-input -j ufw6-user-input
-A ufw6-before-output -o lo -j ACCEPT
-A ufw6-before-output -m rt --rt-type 0 -j DROP
-A ufw6-before-output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 1 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 2 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 3 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 4 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 128 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 129 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 133 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 136 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 135 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 134 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 141 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 142 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 130 -j ACCEPT
-A ufw6-before-output -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 131 -j ACCEPT
-A ufw6-before-output -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 132 -j ACCEPT
-A ufw6-before-output -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 143 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 148 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -p ipv6-icmp -m icmp6 --icmpv6-type 149 -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 151 -m hl --hl-eq 1 -j ACCEPT
-A ufw6-before-output -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 152 -m hl --hl-eq 1 -j ACCEPT
-A ufw6-before-output -s fe80::/10 -p ipv6-icmp -m icmp6 --icmpv6-type 153 -m hl --hl-eq 1 -j ACCEPT
-A ufw6-before-output -j ufw6-user-output
-A ufw6-logging-allow -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW ALLOW] "
-A ufw6-logging-deny -m conntrack --ctstate INVALID -m limit --limit 3/min --limit-burst 10 -j RETURN
-A ufw6-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw6-skip-to-policy-forward -j DROP
-A ufw6-skip-to-policy-input -j DROP
-A ufw6-skip-to-policy-output -j ACCEPT
-A ufw6-track-output -p tcp -m conntrack --ctstate NEW -j ACCEPT
-A ufw6-track-output -p udp -m conntrack --ctstate NEW -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 20 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 21 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 25 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 53 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 80 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 110 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 143 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 587 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 993 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 995 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 8080 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 8081 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 10000 -j ACCEPT
-A ufw6-user-input -p udp -m udp --dport 53 -j ACCEPT
-A ufw6-user-input -p tcp -m multiport --dports 29799:29899 -j ACCEPT
-A ufw6-user-input -p udp -m udp --dport 25 -j ACCEPT
-A ufw6-user-input -p tcp -m tcp --dport 8082 -j ACCEPT
-A ufw6-user-limit -m limit --limit 3/min -j LOG --log-prefix "[UFW LIMIT BLOCK] "
-A ufw6-user-limit -j REJECT --reject-with icmp6-port-unreachable
-A ufw6-user-limit-accept -j ACCEPT
COMMIT
# Completed on Wed Oct 17 06:25:40 2018

edit3:

ขอบคุณทุกคนที่ช่วยฉันทำให้ฉันสามารถโน้มน้าวใจผู้ให้บริการดาต้าเซ็นเตอร์ว่าปัญหาอยู่ในโครงสร้างพื้นฐานของพวกเขา ปัญหาคือการตั้งค่า MTU บนเราเตอร์เสมือนจริงในเส้นทางสู่อินเทอร์เน็ต


Outside = นอกเครือข่ายในส่วน LAN แยกต่างหากหรือจากคอมพิวเตอร์ที่อยู่ในส่วน LAN เดียวกันหรือไม่
— IceMage

1
@IceMage Outside หมายถึงจากอินเทอร์เน็ต นอกเครือข่าย ฉันจะแก้ไขคำถามเพื่อชี้แจง
— j.kaspar

คุณกำหนดค่าไฟร์วอลล์บนเซิร์ฟเวอร์แล้วหรือยัง หากเซิร์ฟเวอร์กำลังใช้งาน Linux ผลลัพธ์ที่ได้ip6table-saveก็น่าจะเกี่ยวข้องกัน
— kasperd

@kasperd ฉันเพิ่มกฎที่เกี่ยวข้องกับ icmp ทั้งหมดลงในคำถาม
— j.kaspar

@ j.kaspar มันเป็นผลลัพธ์ของip6tables-saveฉันอยากเห็น คำสั่งนั้นจะส่งออกกฎที่สมบูรณ์
— kasperd

คำตอบ:


19

คุณมีปัญหาเกี่ยวกับ MTU

ผมทดสอบในขณะที่สังเกตการจราจรด้วยwget -O /dev/null https://www.ekasparova.eu tcpdumpนี่คือสิ่งที่ฉันเห็น:

19:56:57.048361 IP6 2001:db8::1.47386 > 2a04:f310:100:3:f816:3eff:fea3:4553.443: Flags [S], seq 262121609, win 28800, options [mss 1440,sackOK,TS val 298423713 ecr 0,nop,wscale 7], length 0
19:56:57.087457 IP6 2a04:f310:100:3:f816:3eff:fea3:4553.443 > 2001:db8::1.47386: Flags [S.], seq 2396216876, ack 262121610, win 28560, options [mss 1440,sackOK,TS val 82836580 ecr 298423713,nop,wscale 7], length 0
19:56:57.087490 IP6 2001:db8::1.47386 > 2a04:f310:100:3:f816:3eff:fea3:4553.443: Flags [.], ack 1, win 225, options [nop,nop,TS val 298423723 ecr 82836580], length 0
19:56:57.087692 IP6 2001:db8::1.47386 > 2a04:f310:100:3:f816:3eff:fea3:4553.443: Flags [P.], seq 1:322, ack 1, win 225, options [nop,nop,TS val 298423723 ecr 82836580], length 321
19:56:57.126190 IP6 2a04:f310:100:3:f816:3eff:fea3:4553.443 > 2001:db8::1.47386: Flags [.], ack 322, win 232, options [nop,nop,TS val 82836590 ecr 298423723], length 0
19:56:57.141224 IP6 2a04:f310:100:3:f816:3eff:fea3:4553.443 > 2001:db8::1.47386: Flags [P.], seq 2857:3678, ack 322, win 232, options [nop,nop,TS val 82836594 ecr 298423723], length 821
19:56:57.141301 IP6 2001:db8::1.47386 > 2a04:f310:100:3:f816:3eff:fea3:4553.443: Flags [.], ack 1, win 248, options [nop,nop,TS val 298423736 ecr 82836590,nop,nop,sack 1 {2857:3678}], length 0

3 ซองแรกคือการจับมือกัน ปลายทั้งสองประกาศmss 1440ซึ่งหมายความว่าพวกเขามีความสามารถในการรับแพ็คเก็ตที่มี 1440 ไบต์ของส่วนของข้อมูล TCP นับส่วนหัวเช่นกันรวมถึง 1500 ไบต์ของการรับส่งข้อมูล IP ซึ่งเป็นสิ่งที่ Ethernet ทั่วไปสนับสนุน

อีก 2 แพ็กเก็ตถัดไปคือไคลเอนต์สวัสดีและการตอบรับที่เซิร์ฟเวอร์ได้รับ

แพ็กเก็ต 2 ชุดสุดท้ายคือสิ่งที่น่าสนใจ โดยค่าเริ่มต้นtcpdumpจะแสดงหมายเลขลำดับสัมพัทธ์ซึ่งในกรณีนี้ทำให้การอ่านง่ายขึ้น seq 2857:3678ในแพ็คเก็ตจากเซิร์ฟเวอร์นี้เป็นส่วนที่น่าสนใจ เราเห็นการกระโดดจาก1ไปสู่2857ซึ่งหมายความว่ามีช่องว่าง 2856 ไบต์ซึ่งลูกค้ายังไม่ได้รับ 2856 ไบต์สอดคล้องกับสองแพ็คเก็ตของ 1428 ไบต์ ความแตกต่างระหว่าง 1440 ถึง 1428 คือขนาดของตัวเลือกการประทับเวลา

ดังนั้นเซิร์ฟเวอร์จึงส่งเซิร์ฟเวอร์สวัสดีแยกออกเป็น 3 แพ็กเก็ต แต่สองรายการแรกนั้นใหญ่เกินไปสำหรับเครือข่ายและไม่ได้ส่งมอบให้กับลูกค้า

sack 1 {2857:3678}ในแพ็คเก็ตสุดท้ายจากลูกค้าไปยังเซิร์ฟเวอร์ที่เราเห็นนี้ นี่คือการตอบรับแบบเลือกที่ส่งโดยไคลเอนต์แจ้งเซิร์ฟเวอร์ว่ามีช่องว่างในข้อมูลที่ได้รับมาจนถึงตอนนี้

มีแนวโน้มว่าเซิร์ฟเวอร์จะส่งแพ็คเก็ตที่สูญหายไปสองแพ็กเก็ตซ้ำแล้วซ้ำอีก แต่ไม่ว่ากี่ครั้งที่มันส่งผ่านสองแพ็กเก็ตเดียวกันพวกเขายังคงมีขนาดใหญ่เกินไปสำหรับเครือข่าย และเราเตอร์บนเส้นทางอาจส่งข้อความแสดงข้อผิดพลาดกลับไปที่เซิร์ฟเวอร์เพื่อแจ้งให้ทราบว่าแพ็กเก็ตมีขนาดใหญ่เกินไปและจำเป็นต้องส่งซ้ำในแพ็กเก็ตขนาดเล็ก

หากเซิร์ฟเวอร์ได้รับข้อความแสดงข้อผิดพลาดเหล่านั้นก็จะส่งแพ็กเก็ตใหม่ให้เล็กลงตามต้องการ และมันจะจำ PMTU ขนาดเล็กลงเช่นนั้นในคำขอถัดไปมันไม่จำเป็นต้องทำซ้ำขั้นตอนการค้นพบนี้

คำอธิบายที่เป็นไปได้สำหรับสิ่งนี้คือคุณมีไฟร์วอลล์ที่กำหนดค่าผิดพลาดซึ่งจะทำให้ข้อความแจ้งข้อผิดพลาดทั้งหมดแจ้งเซิร์ฟเวอร์ของคุณว่าจำเป็นต้องส่งข้อมูลซ้ำในแพ็กเก็ตขนาดเล็ก


1
น่าสนใจ ขอบคุณ! ข้อความแสดงข้อผิดพลาด - ฉันเดาว่าเป็นโปรโตคอล ICMP ... มีวิธีทดสอบไหม ไฟร์วอลล์บนเซิร์ฟเวอร์และไฟร์วอลล์ระหว่างเซิร์ฟเวอร์และอินเทอร์เน็ตควรเปิดสำหรับการสื่อสาร ICMP ทั้งหมด
— j.kaspar

@ j.kaspar ไฟร์วอลล์คืออะไร พวกเขาจะกำหนดค่าอย่างไร คุณทดสอบพวกเขาอย่างไร
— Michael Hampton

@MichaelHampton มีการติดตั้งไฟร์วอลล์ iptables โดยตรงบนเซิร์ฟเวอร์ อันที่สองเป็นของดาต้าเซ็นเตอร์และฉันสามารถจัดการกฎของมันได้ ฉันไม่รู้วิธีทดสอบ ICMP จริงๆ แต่กฎของทั้งคู่จะถูกตั้งค่าเป็น <-> ทุกที่ที่อนุญาตสำหรับ ICMP
— j.kaspar

1
@ j.kaspar บนเซิร์ฟเวอร์ Linux ลองtraceroute6 --mtu www.google.comและมองหาF=####แทรกลงในบรรทัดเอาต์พุตหรือบรรทัดเอาต์พุตที่ไม่มีการตอบกลับมาเลย ในความคิดที่สองเพียงแค่เรียกใช้และแก้ไขคำถามของคุณด้วยผลลัพธ์
— Michael Hampton

@MichaelHampton เสร็จสิ้น อย่างไรก็ตามฉันไม่แน่ใจว่าจะตีความผลลัพธ์อย่างไร นั่นหมายความว่าการสื่อสารไม่ผ่านการกระโดดครั้งที่สองเลยหรือ
— j.kaspar

1

ฉันเห็นด้วยกับ @kasperd ว่าเป็นปัญหาของ MTU ตัวอย่างเช่นโดยค่าเริ่มต้นwget -6 -O/dev/null http://www.ekasparova.euจะไม่ทำงาน (มันจะได้รับการเปลี่ยนเส้นทางสั้น ๆ ไปยังhttps://www.babysoul.cz/IP เดียวกัน จากนั้นฉันบังคับให้ MSS ลดลงสำหรับโฮสต์ของคุณ:

ip -6 ro add 2a04:f310:100:3:f816:3eff:fea3:4553 advmss 1000 via $MY_GW

และหลังจากนั้นใช้wgetงานได้ตามปกติ ดังนั้นจึงเป็นปัญหาของ MTU การเปรียบเทียบผลลัพธ์ของmtr -6 -n --psize 1410 www.ekasparova.eu(ซึ่งใช้งานได้) กับmtr -6 -n --psize 1411 www.ekasparova.euจะระบุว่าปัญหานั้นเกิดขึ้นที่โฮสต์ของคุณ 2a04:f310:100:3:f816:3eff:fea3:4553หรือที่ต้นน้ำ2a04:f310:100::125

สิ่งที่คุณสามารถทำได้เพื่อแก้ไขปัญหา (นอกเหนือจากการติดต่อต้นน้ำของคุณ):

ทดสอบขนาดแพ็คเก็ตที่แตก (เช่นwget -6 -O/dev/null http://v6.testmyipv6.com/MTUtest/1500.datอาจจะไม่เหมาะกับคุณในขณะที่ควร แต่wget -6 -O/dev/null http://v6.testmyipv6.com/MTUtest/1000.datจะใช้ได้ดี) จากนั้น:

  • (แย่กว่า) หนีบ MSS ของคุณเพื่อหาเส้นทาง IPv6 ที่เป็นค่าเริ่มต้น โปรดทราบว่าจะทำงานสำหรับ TCP เท่านั้น ตัวอย่างเช่นแพ็คเก็ต UDP DNS จะยังคงเสียหายหรือ
  • (ดีกว่า) ลด MTU อินเตอร์เฟสของคุณ (ตัวอย่าง ifconfig eth0 mtu 1200) สิ่งนี้ควรใช้ได้กับทุกแพ็กเก็ต ปัญหาคือหากบางสิ่งในทางมี MTU ที่ต่ำกว่าคุณจะไม่สามารถสื่อสารกับพวกเขาได้ และการลด MTU จะส่งผลให้ประสิทธิภาพค่อนข้างต่ำ (ไม่ใช่เรื่องใหญ่ยกเว้นว่าคุณมักเป็นไซต์ใหญ่)
  • (ดีที่สุด) ลองใช้หากการลบไฟร์วอลล์ IPv6 (ของคุณและของคุณอยู่ด้านบน) ช่วยได้ และเมื่อคุณรู้ว่ามันเป็นเช่นนั้นพยายามที่จะนำมันกลับมารวมกันทีละขั้นตอนโดยไม่ทำลายการค้นพบ PMTU จนกว่าคุณจะพบบรรทัดที่มีปัญหา ปัญหาคือต้องมีการทำงานและความร่วมมือจาก ISP ของคุณมากขึ้น (และการเปิดไฟร์วอลล์อาจทำให้คุณเสี่ยงได้ในเวลานั้น)

การลด MSS บนเส้นทางเริ่มต้นไม่ใช่คำแนะนำที่ไม่ดี เป็นสิ่งที่ฉันได้ทำในสภาพแวดล้อมการผลิตเพื่อแก้ไขปัญหา MTU ในเครือข่ายของผู้อื่น ฉันไม่ได้ไปให้ต่ำกว่า 1,000 1220 มีขนาดเล็กพอที่จะเก็บแพ็คเก็ตเต็มรูปแบบภายใน 1280 ไบต์ซึ่ง IPv6 รับประกันว่าจะทำงานได้ตั้งแต่ต้นจนจบ อย่างไรก็ตามปัญหาในคำถามจะไม่ได้รับการบรรเทาโดยการลด MSS บนเส้นทางเริ่มต้นเนื่องจากมีผลกับขนาดแพ็คเก็ตในทิศทางเดียวเท่านั้น
— kasperd

หนึ่งสามารถทำให้ MSS อยู่ในระหว่างการขนส่ง (น่าจะเป็นไปได้ที่จะทำip6tables) คุณไม่ควรทำเช่นนั้น แต่ปรากฎว่าการยึด MSS ในการขนส่งสูงสุด 1220 เป็นวิธีแก้ปัญหาที่มีประสิทธิภาพมากสำหรับปัญหา MTU และสามารถทำได้ที่จุดปลายหรือในระหว่างเราเตอร์และมันจะช่วยลดปัญหา MTU สำหรับ TCP ในทั้งสองทิศทาง
— kasperd

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

@kasperd ไม่ควรลด MSS ลงในด้านใดด้านหนึ่งสำหรับปริมาณข้อมูลที่ไหลในทั้งสองวิธีเนื่องจากมีการเจรจา (เป็น MSS ที่ต่ำกว่า) สำหรับเซสชัน TCP ทั้งหมดในระหว่างการจับมือ 3way หรือไม่ สำหรับการลด MTU และทำลาย UDP ขาเข้าในขณะที่เป็นจริงมันจะไม่แก้ปัญหา แต่ก็ไม่ควรสร้างปัญหาเพิ่มเติมเนื่องจาก UDP ที่มีขนาดใหญ่เกินไปนั้นจะไม่ทำงานอยู่ดี .
— Matija Nalis

1
ไม่ MSS ถูกเจรจาอย่างอิสระสำหรับสองทิศทาง แต่ละฝ่ายรู้จำนวนสูงสุดที่พวกเขาเต็มใจที่จะส่งและแจ้งให้อีกฝ่ายทราบถึงจำนวนสูงสุดที่พวกเขาเต็มใจที่จะรับ เมื่อคุณตั้งค่าadvmssคุณจะมีผลกับขนาดของเซ็กเมนต์ที่คุณจะได้รับไม่ใช่เซ็กเมนต์ที่คุณกำลังจะส่ง จำนวนสูงสุดที่คุณยินดีส่งไม่ได้สื่อสารกัน - เพราะไม่จำเป็นต้องทำเช่นนั้น ทั้งสองได้รับค่าเริ่มต้นจาก MTU ซึ่งหนึ่งในสองสามารถแทนที่advmssได้ ฉันไม่ทราบวิธีสำหรับรายการการกำหนดเส้นทางเพื่อแทนที่รายการอื่น แต่ถ้ามีวิธีฉันต้องการเรียนรู้
— kasperd
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.