Tôi có một giá đỡ 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 gán tiền tố IPv6 gốc cho máy chủ của tôi. Vì tôi gặp vấn đề về MTU với đường hầm 6to4 nên tôi phải giảm MTU trên giao diện đường hầm xuống mức tối thiểu (1280 – nếu tôi cố đặt bất kỳ giá trị nào thấp hơn, tôi nhận được thông báo "Lỗi: mtu thấp hơn mức tối thiểu của thiết bị." ).
NFS vẫn muốn gửi các gói qua MTU. Tôi biết điều này, bởi vì tôi có một quy tắc nftables để ghi lại các gói ESP:
đầu ra chuỗi {
loại móc bộ lọc đầu ra bộ lọc ưu tiên; chính sách chấp nhận;
gói truy cập đặc biệt ip6 nexthdr 303367 byte 323173696 chấp nhận nhật ký
}
Vì vậy, tôi thấy các gói này được đăng nhập vào nhật ký hệ thống/tạp chí:
Ngày 29 tháng 1 21:41:18 kernel nfsclient: 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 riêng tư.)
Bây giờ tôi không thể thấy gói đã ghi với tcpdump
bởi vì được cho là chúng bị hạt nhân loại bỏ do vượt quá MTU.Tôi cho rằng 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 một gói dưới 1280 byte, thì tiêu đề ESP được thêm vào nó sẽ 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ì sự phân mảnh sẽ hoạt động. (Tôi đã thử nghiệm nó với ping6 -M muốn
và các gói bị phân mảnh đã đi qua.) Vì vậy, tôi không thể hạ thấp MTU, NFS khăng khăng 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ĩ về, nhưng không biết cách thực hiện:
- Đặt kích thước gói tối đa cho NFS, ví dụ: với tùy chọn gắn kết, nhưng tôi không nghĩ có cài đặt như vậy, tôi đã tìm kiếm nó rồi.
- Định cấu hình Strongswan để xử lý tình huống, nhưng tôi cũng không tìm thấy tùy chọn như vậy.
- Đặt quy tắc nftables bằng cách nào đó thông báo cho NFS rằng nó sẽ tạo 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 điều đó có khả thi hay không.
- Xóa cờ DF khỏi các gói để buộc phân mảnh. Tôi cũng không biết làm thế nào, hoặc liệu nó có khả thi hay không.
Tôi nghĩ rằng nftables là con đường để đi, nhưng nếu nó có thể được giải quyết ở cấp độ NFS, nó sẽ còn tốt hơn nữa. Tôi cũng đánh giá cao các giải pháp với iptables, tôi có thể tra cứu những gì tương đương với nftables.
Bởi vì nó được hỏi trong các bình luậ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 trạng thái mq UP chế độ MẶC ĐỊNH nhóm mặc định qlen 1000
liên kết/ether aa:00:11:4d:f7:01 brd ff:ff:ff:ff:ff:ff
4: he-ipv6@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1280 qdisc noqueue state UNKNOWN mode DEFAULT nhóm mặc định qlen 1000
liên kết/ngồi 192.168.32.84 ngang hàng 216.66.84.42
Và đây là những đường hầm (đường hầm ip
):
sit0: ipv6/ip từ xa bất kỳ cục bộ nào bất kỳ ttl 64 nopmtudisc tiền tố thứ 6 2002::/16
he-ipv6: ipv6/ip remote 216.66.84.42 local 192.168.32.84 ttl 255 6rd-prefix 2002::/16
(Đã thay đổi địa chỉ IPv4 công khai của tôi thành địa chỉ riêng, nhưng trên thực tế, tôi có một địa chỉ có thể định tuyến toàn cầu cho địa phương
; 216.66.84.42 là cổng đường hầm HE 6to4, nó nổi tiếng nên để ở đây.)
Và đây là tuyến đường mặc định áp dụng cho lưu lượng:
mặc định qua 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ẽ bị tắt he-ipv6
, có MTU là 1280. Nhưng các gói của chúng trước tiên được đóng gói trong IPSec ESP, 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ẽ xuất hiện trên eth0
giao diện hướng tới 216.66.84.42 (cổng HE).