OpenVPN: Yol MTU sorunlarını istemci başına nasıl azaltabilirim?


16

Müşterilerimize yüklenmiş onlarca gömülü cihaz var, hepsi de OpenVPN servisimize ev sahipliği yapıyor. Bu genel olarak iyi çalışıyor, ancak bazı müşterilerimizin ciddi MTU sorunları var. Ağlarını düzeltmek için müşteriler üzerindeki etkimiz sınırlıdır, bu nedenle bununla başa çıkmak için OpenVPN'e ihtiyacımız var. Kısacası sorum şu:

Bazı istemcilerin düşük yollu MTU'larını istemci başına temeller üzerinde, yani tüm istemciler için en kötü durumu barındıran genel ayarları kullanmadan nasıl azaltabilirim?

En kötü durumumuzun oldukça kötü olduğuna dikkat edin: MTU 576 yolu, tüm parçaları düşürür, kendini parçalamaz, DF bitini onurlandırmaz. Neden bu sorunu küresel olarak çözmemeyi tercih ettiğimi görüyorsunuz.

OpenVPN manpage teklifler MTU bir dizi en önemlisi seçenekleri ile ilgili --link-mtu, --tun-mtu, --fragment and --mssfix. Ama aynı zamanda diyor

--link-mtu [...] Ne yaptığınızı bilmiyorsanız bu parametreyi ayarlamamak en iyisidir.

--tun-mtu [...] MTU boyutlandırma sorunlarıyla ilgilenmek için --fragment ve / veya --mssfix seçeneklerini kullanmak en iyisidir.

Bu yüzden denemeye başladım --fragmentve --mssfixkısa süre sonra en azından eskisinin sadece istemci tarafı değil, aynı zamanda sunucu tarafı da ayarlanması gerektiğini fark ettim . Daha sonra sunucu tarafı istemci başına yapılandırma üzerinden baktım --client-config-dirama diyor ki

Aşağıdaki seçenekler istemciye özgü bağlamda yasaldır: --push, --push-reset, --iroute, --ifconfig-push ve --config.

MTU seçeneklerinden bahsedilmiyor!

İşte daha spesifik sorularım:

  • Neden tam olarak link-mtu ve tun-mtucesaretiniz kırıldı? Bu seçeneklerle ilgili olası sorunlar nelerdir? Düşük seviyeli IP başlığı munging ile oldukça rahat olduğumu unutmayın.
  • Seçeneklerden hangisi link-mtu tun-mtu fragment mssfixÇalışmak hangilerinin sunucu tarafında yansıtılması gerekir?
  • Seçeneklerden hangisi link-mtu tun-mtu fragment mssfix kullanılabilir client-config-dir?
  • Dört seçeneğin de sunucu tarafında yansıtılması ve içeride kullanılamaması durumunda client-config-dir : İstemci başına düşük yollu MTU ile savaşmanın alternatifleri var mı?

Notlar:

  • Sorularımın bir kısmı 5 yıl önce soruldu burada , Ama o zamanlar gerçekten cevaplanmadılar, bu yüzden onları kopyalamaya cesaret .
  • OpenVPN sunucusu şu anda Ubuntu 12.04'te 2.2.1. Ubuntu 14.04'te 2.3.2 sürümüne yükseltme hazırlıyoruz
  • OpenVPN istemcileri Debian 7.6 için 2.2.1'dir
  • Bir müşterinin yolunu MTU'yu kendim manuel olarak belirlemekten mutluluk duyuyorum
  • Şu anda çok fazla sunucu tarafı test edemiyoruz. Ama biz ayrı bir test yatağı inşa ediyoruz, yakında hazır olmalıyız.

Herhangi bir yararlı tavsiye için minnettarım.


1
576? Sevgili gawd. Çevirmeli ağ günlerinden bu yana düşük bir MTU görmedim. Bu eski bir seri bağlantı üzerinden mi geçiyor?
Michael Hampton

İki OpenVPN sunucusu çalıştırabilir misiniz? Belki her iki sunucuyu da aynı ortak IP adresinde çalıştırabilir ve istemcileri bilinen bir sorunlu ağda olup olmadıklarına (istemci listesi tarafından belirlendiği şekilde) bağlı olarak farklı bir OpenVPN sunucusuna yönlendirmek için bağlantı noktası yönlendirme (veya yönlendirme ilkesi) kullanabilirsiniz. IP adresleri).
kasperd

1
@MichaelHampton Ben de merak ettim. 600kbit / s ve RTT ~ 30ms, bana eski bir seri gibi görünmüyor. Diğer aptal ayarları (örneğin DF 'parçalanma gerekli' ile yanıt vermiyor) olduğu göz önüne alındığında, sanırım bu sadece başka bir. Onlara söyledik, ancak henüz bir şey duymadık.
Nils Toedtmann

@kasperd ilginç bir fikir. Birden çok OpenVPN sunucu örneği çalıştırabilirim. Farklı MTU aralıkları için belki 3 veya 4 olması gerekir. İstemci başına sunucu tarafı NAT işe yaramazdı (dinamik genel istemci IP adreslerini tahmin edemiyorum), ancak MTU ayarları için yine de istemci yapılandırmasını değiştirmek zorunda kalacaktım (doğru?), Bu yüzden sadece farklı bağlantı noktasını düz yapılandıracağım müşteriye. - Ama kaçınmayı tercih ettiğim bir bakım kabusu olurdu!
Nils Toedtmann

@NilsToedtmann Hangi istemcilerin etkilendiğini tespit etmek için hangi kriterleri kullanırsınız? Diğer bir yaklaşım, bir istemci bağlandıktan sonra sunucuda bir komut dosyası çalıştırmak olabilir. Komut dosyası, hangisinin işe yarayıp yaramadığını anlamak için istemci IP adresine farklı paket boyutlarında ping atmayı deneyebilir. Daha sonra iptables, bu istemci IP adresine veya bu IP adresinden gelen tüm SYN paketlerindeki MSS'yi azaltmak için kurallar ekleyebilir .
kasperd

Yanıtlar:


4

İstemci tarafında sorunu mssfix 1300yapılandırma dosyasına ekleyerek sorunu çözdüm.

Openvpn man sayfasından:

--mssfix max
    Announce to TCP sessions running over the tunnel that they should limit their send packet sizes such that after OpenVPN has encapsulated them, the resulting UDP packet size that OpenVPN sends to its peer will not exceed max bytes. 

Çözümüm için orijinal fikir personalvpn.org'dan geldi


1
Yani mssfixsadece istemci tarafı ayarlanabilir? En azından bu bir şey. Yine de UDP paketleri ile yardımcı olmuyor (bu yüzden diğer seçeneklerle ilgileniyordum, ancak en azından önerilenlerin fragmentsunucu tarafı olarak ayarlanması gerekiyor)
Nils Toedtmann

3
mssfix, istemcinin yanı sıra sunucuya da eklenebilir. Ancak daha küçük bir değer müzakerede kullanılacak
Ahmed

2

Cevap eksikliği göz önüne alındığında, şimdi çok zarif değil, ama basit bir çözüm gönderiyorum: "Kötü istemciler" için TCP üzerinde başka bir OpenVPN örneği çalıştırın

proto tcp

istemcideki TCP MSS'yi düşürün, ör.

iptables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o ${OUT_DEV} -j TCPMSS --set-mss ${PATH-MTU-MINUS-40}

Bu çözümün bir avantajı, her müşterinin kendi MSS'sini ayarlayabilmesidir.

Bu kuşkusuz TCP üzerinden TCP'dir, ancak birçok senaryoda yeterince iyi performans göstermelidir .

Ben hala gerekli olmayan çok ilgilenen çözümler olduğumu unutmayın proto tcpve ben az ya da çok özetlenen gereksinimleri karşılamak eğer onları geçerli cevap olarak işaretleyeceğim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.