NGINX SSL không phản hồi qua IPv6


10

Trên máy chủ Debian có nginx, tôi không nhận được phản hồi từ máy chủ web qua HTTPS và IPv6. HTTP hoạt động tốt.

  • netstat báo cáo cổng 443 nghe trên địa chỉ IPv6
  • tường lửa đang mở, ipv6scanner.com báo cáo cổng 443 mở
  • cục bộ (trên thiết bị đầu cuối) wget và curl nhận được phản hồi chính xác, vì vậy cấu hình nginx là OK
  • không có dấu hiệu lỗi từ nginx error.log
  • không có bản ghi trong access.log khi nó bị lỗi, vì vậy giao tiếp có thể không đến được máy chủ web
  • DNS vẫn ổn. Dịch hoạt động và kết nối không hoạt động ngay cả khi địa chỉ IP được truy cập trực tiếp

Mọi nỗ lực kết nối từ "bên ngoài" (nghĩa là bên ngoài mạng, từ internet) đều thất bại (trình duyệt web, telnet, ipv6-test.com, curl ...). Không có phản hồi nào cả.

Nó có thể được thử nghiệm trên www.ekasparova.eu. Tôi không biết gì Tôi có thể kiểm tra cái gì khác?

biên tập:

đầu ra của traceroute6 --mtu www.google.comnhư sau:

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

Vì vậy, nó không bao giờ đi đến cuối ...

chỉnh sửa2:

IP6tables-save output của tôi (tường lửa cục bộ):

# 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

chỉnh sửa 3:

Nhờ sự giúp đỡ của mọi người, tôi đã có thể thuyết phục được nhà điều hành trung tâm dữ liệu rằng vấn đề nằm ở cơ sở hạ tầng của họ. Vấn đề thực sự nằm ở cài đặt MTU trên bộ định tuyến ảo trên đường dẫn đến internet.


Bên ngoài = Bên ngoài mạng trên một phân đoạn LAN riêng biệt hoặc từ một máy tính ngồi trên cùng một phân đoạn LAN?
IceMage

1
@IceMage Bên ngoài có nghĩa là từ internet. Bên ngoài mạng. Tôi sẽ chỉnh sửa câu hỏi để làm rõ
j.kaspar

Bạn đã cấu hình một tường lửa trên máy chủ? Nếu máy chủ đang chạy Linux, thì đầu ra của ip6table-savesẽ có liên quan.
kasperd

@kasperd Tôi đã thêm tất cả các quy tắc liên quan đến icmp vào câu hỏi
j.kaspar

@ j.kaspar Đó là đầu ra của ip6tables-savetôi muốn xem. Lệnh đó sẽ xuất ra các quy tắc hoàn chỉnh.
kasperd

Câu trả lời:


19

Bạn có một vấn đề MTU.

Tôi đã kiểm tra wget -O /dev/null https://www.ekasparova.eutrong khi quan sát giao thông với tcpdump. Đây là những gì tôi thấy:

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 gói đầu tiên là bắt tay. Cả hai đầu đều thông báo mss 1440điều đó có nghĩa là chúng có khả năng nhận các gói với tải trọng TCP 1440 byte, tính cả các tiêu đề cũng có tổng lưu lượng là 1500 byte, đây là điều mà Ethernet thường hỗ trợ.

2 gói tiếp theo là máy khách xin chào và xác nhận nó đã được máy chủ nhận.

2 gói cuối cùng là nơi mọi thứ trở nên thú vị. Theo mặc định tcpdumphiển thị số thứ tự tương đối, trong trường hợp này làm cho việc chụp dễ đọc hơn. Trong gói từ máy chủ, đây là phần thú vị seq 2857:3678. Chúng ta thấy một bước nhảy từ 1để 2857mà phương tiện có một khoảng cách của 2856 byte mà khách hàng vẫn chưa nhận được. 2856 byte tương ứng với hai gói 1428 byte. Sự khác biệt giữa 1440 và 1428 là kích thước của tùy chọn dấu thời gian.

Vì vậy, máy chủ đã gửi máy chủ xin chia thành 3 gói. Nhưng hai cái đầu tiên quá lớn so với mạng và không được giao cho khách hàng.

Trong gói cuối cùng từ máy khách đến máy chủ, chúng tôi thấy điều này sack 1 {2857:3678}. Đây là một xác nhận có chọn lọc được gửi bởi khách hàng thông báo cho máy chủ rằng có một khoảng cách trong dữ liệu mà nó đã nhận được cho đến nay.

Có khả năng máy chủ tiếp tục gửi hai gói bị mất nhiều lần. Nhưng bất kể bao nhiêu lần nó truyền lại hai gói giống nhau, chúng vẫn quá lớn đối với mạng. Và có lẽ một bộ định tuyến trên đường dẫn sẽ gửi một thông báo lỗi tới máy chủ thông báo cho nó các gói quá lớn và cần được truyền lại trong các gói nhỏ hơn.

Nếu máy chủ nhận được các thông báo lỗi đó, nó sẽ truyền lại các gói nhỏ hơn nếu cần. Và nó sẽ nhớ PMTU nhỏ hơn để trong các yêu cầu tiếp theo, nó không phải lặp lại bước khám phá này.

Một lời giải thích khả dĩ cho tất cả những điều này là bạn có một tường lửa được cấu hình sai, loại bỏ tất cả các thông báo lỗi thông báo cho máy chủ của bạn, nó cần truyền lại dữ liệu trong các gói nhỏ hơn.


1
Hấp dẫn. Cảm ơn bạn! Những thông báo lỗi đó - tôi đoán đó là giao thức ICMP ... Có cách nào để kiểm tra nó không? Tường lửa trên máy chủ và tường lửa giữa máy chủ và internet, phải được mở cho tất cả các giao tiếp ICMP.
j.kaspar

@ j.kaspar Tường lửa là gì? Chúng được cấu hình như thế nào? Làm thế nào bạn kiểm tra chúng?
Michael Hampton

@MichaelHampton có tường lửa iptables được cài đặt trực tiếp trên máy chủ. Cái thứ hai thuộc về trung tâm dữ liệu và tôi có thể quản lý các quy tắc của nó. Tôi thực sự không biết cách kiểm tra ICMP. Nhưng các quy tắc trên cả hai được đặt ở bất cứ đâu <-> bất cứ nơi nào được phép cho ICMP
j.kaspar

1
@ j.kaspar Trên máy chủ Linux, hãy thử traceroute6 --mtu www.google.comvà tìm kiếm F=####được chèn vào các dòng đầu ra hoặc các dòng đầu ra mà không có phản hồi nào trở lại. Trên suy nghĩ thứ hai, chỉ cần chạy nó và chỉnh sửa câu hỏi của bạn với đầu ra.
Michael Hampton

@MichaelHampton Xong. Tuy nhiên tôi không chắc làm thế nào để giải thích kết quả. Điều đó có nghĩa là, thông tin liên lạc không vượt qua bước nhảy thứ hai?
j.kaspar

1

Tôi đồng ý với @kasperd rằng đó là vấn đề MTU. Ví dụ, theo mặc định wget -6 -O/dev/null http://www.ekasparova.eusẽ không hoạt động (nó sẽ chuyển hướng ngắn đến https://www.babysoul.cz/cùng một IP, nhưng sau đó nó sẽ bị treo trên gói lớn hơn tiếp theo). Sau đó, tôi buộc giảm MSS cho máy chủ của bạn:

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

và sau đó wgethoạt động bình thường. Vì vậy, đó là vấn đề MTU. So sánh đầu ra của mtr -6 -n --psize 1410 www.ekasparova.eu(hoạt động) với mtr -6 -n --psize 1411 www.ekasparova.eusẽ chỉ ra vấn đề là tại máy chủ của bạn 2a04:f310:100:3:f816:3eff:fea3:4553hoặc tại thượng nguồn của nó tại2a04:f310:100::125

Những gì bạn có thể làm như cách giải quyết (ngoài việc liên hệ với thượng nguồn của bạn):

Kiểm tra kích thước gói mà nó phá vỡ (nghĩa là wget -6 -O/dev/null http://v6.testmyipv6.com/MTUtest/1500.datcó thể sẽ không hoạt động cho bạn trong khi nó nên, nhưng wget -6 -O/dev/null http://v6.testmyipv6.com/MTUtest/1000.datsẽ hoạt động tốt), và sau đó:

  • (tệ hơn) kẹp MSS của bạn cho tuyến IPv6 mặc định (như tôi đã làm ở trên). Lưu ý rằng sẽ chỉ hoạt động cho TCP; ví dụ các gói DNS UDP vẫn sẽ bị hỏng hoặc
  • (tốt hơn) giảm MTU giao diện của bạn (ví dụ ifconfig eth0 mtu 1200). Điều này sẽ làm việc cho tất cả các gói. Vấn đề là nếu một cái gì đó trên đường thậm chí còn có MTU thấp hơn, bạn sẽ không thể liên lạc với họ. Và giảm MTU sẽ dẫn đến hiệu suất thấp hơn một chút (không phải là vấn đề lớn trừ khi bạn thường là một trang web lớn)
  • (tốt nhất) thử nếu loại bỏ tường lửa IPv6 (của bạn và tại tuyến trên của bạn) sẽ giúp; và khi bạn phát hiện ra điều đó, hãy cố gắng đưa nó trở lại cùng nhau từng bước mà không phá vỡ khám phá PMTU, cho đến khi bạn tìm thấy dòng có vấn đề. Vấn đề là nó đòi hỏi nhiều công việc và sự hợp tác từ ISP của bạn (và việc mở tường lửa có thể khiến bạn dễ bị tổn thương trong thời gian này).

Giảm MSS trên tuyến mặc định không phải là một gợi ý tồi. Đó là điều tôi đã và đang làm trong môi trường sản xuất để giải quyết các vấn đề về MTU trong mạng của người khác. Tôi không đi thấp đến 1000 mặc dù. 1220 đủ nhỏ để giữ gói đầy đủ trong phạm vi 1280 byte mà IPv6 đảm bảo hoạt động từ đầu đến cuối. Tuy nhiên, vấn đề được đề cập sẽ không được giảm thiểu bằng cách giảm MSS trên tuyến mặc định vì nó chỉ ảnh hưởng đến kích thước gói theo một hướng.
kasperd

Người ta có thể thu thập MSS trong quá trình vận chuyển (nên có thể thực hiện với ip6tables). Bạn không cần phải làm điều đó, nhưng hóa ra việc kẹp MSS trong quá trình tối đa là 1220 là một cách giải quyết rất hiệu quả cho các vấn đề MTU. Và nó có thể được thực hiện ở điểm cuối hoặc bất kỳ điểm giữa các bộ định tuyến và nó sẽ giảm thiểu các vấn đề MTU cho TCP theo cả hai hướng.
kasperd

Việc hạ thấp MTU trên điểm cuối sẽ ảnh hưởng đến MSS đi và nó cũng sẽ giới hạn các gói bạn gửi ngay cả khi bạn nhận được MSS cao hơn. Do đó, MTU thấp hơn ở điểm cuối có thể giảm thiểu các vấn đề MTU cho TCP theo cả hai hướng. Tuy nhiên, nó chỉ giúp cho UDP theo một hướng. Và việc giảm MTU trên các bộ định tuyến giữa có thể giảm thiểu vấn đề MTU hoặc đưa ra các vấn đề MTU mới tùy theo hoàn cảnh. Vì vậy, giảm MSS là một giảm thiểu có thể giúp đỡ mà không có khả năng đưa ra các vấn đề MTU mới.
kasperd

@kasperd không nên hạ MSS ở một bên để lưu lượng truy cập theo cả hai cách, vì nó được đàm phán (dưới dạng MSS thấp hơn) cho toàn bộ phiên TCP trong quá trình bắt tay 3 chiều? Đối với việc hạ thấp MTU và nó phá vỡ các UDP đang đến, trong khi sự thật là nó sẽ không giải quyết được vấn đề, nó không nên tạo thêm vấn đề vì những UDP quá lớn đó sẽ không hoạt động (vì ngược dòng của anh ta sẽ làm rơi chúng) .
Matija Nalis

1
Số MSS được đàm phán độc lập cho hai hướng. Mỗi bên biết tối đa họ sẵn sàng gửi và nói với đầu bên kia tối đa họ sẵn sàng nhận. Khi bạn đặt, advmssbạn chỉ ảnh hưởng đến kích thước của các phân khúc bạn sẽ nhận chứ không phải các phân khúc bạn sẽ gửi. Tối đa bạn sẵn sàng gửi không được truyền đạt - bởi vì không cần điều đó. Cả hai đều lấy giá trị mặc định của chúng từ MTU, một trong hai có thể được ghi đè bằng advmss. Tôi không biết một cách để một mục định tuyến ghi đè lên mục khác, nhưng nếu có một cách, tôi muốn tìm hiểu.
kasperd
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.