Tôi có một ngàm NFS trên đường hầm Strongswan IPSec, được gói gọn trong đường hầm 6to4. IPSec là do tôi cần mã hóa cho lưu lượng NFS, 6to4 là do nhà cung cấp VPS sẽ không chỉ định tiền tố IPv6 gốc cho máy chủ của tôi. Vì tôi gặp sự cố MTU với đường hầm 6to4, nên tôi phải hạ MTU trên giao diện đường hầm xuống mức tối thiểu (1280 - nếu tôi cố gắng đặt bất kỳ thứ gì thấp hơn, tôi nhận được thông báo "Lỗi: mtu nhỏ hơn mức tối thiểu của thiết bị").

NFS vẫn muốn gửi gói tin qua MTU. Tôi biết điều này, vì tôi có quy tắc nftables để ghi các gói ESP:

    chain output {
    type filter hook output priority filter; policy accept;
    ip6 nexthdr esp counter packets 303367 bytes 323173696 log accept
}

Vì vậy, tôi thấy các gói này được đăng nhập trong nhật ký hệ thống / tạp chí:

Jan 29 21:41:18 nfsclient kernel: IN= OUT=he-ipv6 SRC=fd48:2b50:6a95:a6db:0000:0000:0000:0004 DST=fdc8:d5f9:cbbf:b206:0000:0000:0000:2001 LEN=1316 TC=0 HOPLIMIT=64 FLOWLBL=155038

(IP được thay đổi thành riêng tư vì lý do bảo mật.)

Bây giờ tôi không thể nhìn thấy gói đã ghi với tcpdumpvì được cho là chúng bị hạt nhân loại bỏ do vượt quá MTU. Tôi giả sử NFS cố gắng tuân thủ cài đặt MTU, nhưng nó không biết rằng các gói của nó sẽ được đóng gói trong IPSec. Vì vậy, ngay cả khi NFS tạo ra một gói tin dưới 1280 byte, tiêu đề ESP được thêm vào nó sẽ giúp nó vượt qua MTU đã đặt. Tôi cũng nghi ngờ rằng NFS đặt cờ DF trên các gói của nó, vì nếu không thì việc phân mảnh sẽ hoạt động. (Tôi đã thử nghiệm nó với ping6 -M wantcác gói bị phân mảnh.) Vì vậy, tôi không thể hạ MTU, NFS khẳng định gửi các gói sẽ vượt qua MTU khi được mã hóa và thậm chí đặt cờ DF.

Tôi có thể làm gì bây giờ? Những điều sau đây tôi đã nghĩ đến, nhưng không biết làm thế nào để thực hiện:

  1. Đặt kích thước gói tối đa cho NFS, ví dụ như với tùy chọn gắn kết, nhưng tôi không nghĩ rằng có cài đặt như vậy, tôi đã tìm kiếm nó.
  2. Định cấu hình Strongswan để đối phó với tình huống, nhưng tôi cũng không tìm thấy tùy chọn như vậy.
  3. Đặt một quy tắc nftables bằng cách nào đó thông báo cho NFS rằng nó sẽ tạo ra các gói nhỏ hơn. Ví dụ: báo cáo MTU thậm chí còn thấp hơn cho NFS khi nó tìm kiếm nó - không biết liệu nó có khả thi hay không.
  4. Loại bỏ cờ DF khỏi các gói để buộc phân mảnh. Tôi cũng không biết phải làm thế nào, hoặc liệu nó có khả thi hay không.

Tôi nghĩ rằng nftables là cách để đi, nhưng nếu nó có thể được giải quyết ở cấp độ NFS, nó sẽ thậm chí còn tốt hơn. Tôi cũng đánh giá cao các giải pháp với iptables, tôi có thể tra cứu các giải pháp tương đương với nftables.

Vì nó được hỏi trong các nhận xét nên tôi cung cấp thông tin về các giao diện của mình.

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether aa:00:11:4d:f7:01 brd ff:ff:ff:ff:ff:ff
4: [email protected]: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1280 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/sit 192.168.32.84 peer 216.66.84.42

Và đây là các đường hầm ( ip tunnel):

sit0: ipv6/ip remote any local any ttl 64 nopmtudisc 6rd-prefix 2002::/16
he-ipv6: ipv6/ip remote 216.66.84.42 local 192.168.32.84 ttl 255 6rd-prefix 2002::/16

(Đã thay đổi IPv4 công khai của tôi thành địa chỉ riêng tư, nhưng trên thực tế, tôi có một địa chỉ có thể định tuyến toàn cầu cho local; 216.66.84.42 là cổng đường hầm HE 6to4, nổi tiếng nên được để ở đây.)

Và đây là tuyến đường mặc định áp dụng cho giao thông:

default via fd48:2b50:6a95:a6db::1 dev he-ipv6 metric 1024 onlink pref medium

Vì vậy, các ứng dụng tin rằng các gói của họ sẽ được gửi đi he-ipv6, có MTU là 1280. Nhưng các gói của họ trước tiên được đóng gói trong IPSec ESP, và sau đó được gửi qua he-ipv6đường hầm. Kết quả là một gói dữ liệu NFS được mã hóa IPSec được đóng gói trong một gói 6to4 mà chính nó sẽ đi ra ngoài eth0giao diện hướng tới 216.66.84.42 (HE gateway).

no answer