Biri 1723'ü yönlendirir, istemci sunucuya ulaşır, kimlik doğrulama başlar ve sonra her şey hatasız durur. Doğal sonuç yanlış paroladır, bu yüzden parola üç kez yeniden yazılır. Yönlendirme doğruydu ve kimlik bilgileri doğruydu. Bozulan şey, yönlendirmenin hiç kapsamadığı ikinci bir protokol ve onunla yardım etmeyi sessizce bırakan bir çekirdek varsayılanıydı.

Yönlendirme hiçbir zaman sorun değildi

Bir port yönlendirme kuralı TCP veya UDP trafiğini tanımlar. Oturumun ortasında başka bir IP protokolüne geçen bir yükü tanımlayamaz ve PPTP tam olarak bunu yapar.

Bu yüzden bağlantı asılı kaldığı ana kadar sağlıklı görünür. Port kuralının yönetebildiği kısım başarılı oldu ve yönetemediği kısım başarısız olan kısımdır.

Denetim için TCP, veri için GRE

Çağrı TCP 1723 üzerinden pazarlık edilir. Ayağa kalktığında yük GRE'ye, IP protokolü 47'ye geçer ve bu hiçbir port numarası taşımaz. Portlara dayanan bir kuralın eşleştirecek bir şeyi yoktur.

GRE'nin taşıdığı şey başlığındaki bir çağrı tanımlayıcısıdır ve NAT çeviricisi bu alanı iki yönde tutarlı biçimde yeniden yazmalıdır, yoksa oturumun iki yarısı anlaşmayı bırakır. Bir yön yeniden yazılıp diğeri yazılmazsa, kimlik doğrulaması yapan ve ardından her veri paketini atan bir oturum oluşur. Belirtinin şekli tam olarak budur: başarı, sonra sessizlik.

PPTP olmadan çıplak GRE böyle bir yeniden yazmaya ihtiyaç duymaz, bu yüzden sıradan bir GRE tüneli aynı yolda PPTP istemcisi için başarısız olan bir yönlendiriciden geçebilir.

Dört modül ve onları kapatan bir sysctl

İki modül çerçevelemeyi ele alır, nf_conntrack_proto_gre ve nf_nat_proto_gre. İki modül daha çağrı tanımlayıcısını ele alır, nf_conntrack_pptp ve nf_nat_pptp. Sonuncusunu yüklemek diğerlerini bağımlılıklar yoluyla çeker, bu yüzden modül listesi dördünü de göstermelidir.

Eski yönergeler 2.6 döneminden kalma ip_ önekini kullanır. Bu komutlar hiçbir şey yüklemeden çalışıyor gibi görünebilir, bu yüzden çıkış durumu yerine yüklenen listeyi kontrol edin.

Yüklü olmaları artık yeterli değil. Linux 4.7'den beri net.netfilter.nf_conntrack_helper sysctl varsayılan olarak 0'dır ve bu yeni akışlar için otomatik yardımcı atamasını devre dışı bırakır. Bir yönlendiricide tüm modüller olabilir ve yine de hiçbir şey çevrilmeyebilir. Modül listesine tekrar bakmadan önce etkin değeri kontrol edin.

Ya otomatik atamayı genel olarak yeniden açın ya da yardımcıyı ihtiyaç duyan akışlara bağlayın ve gerisini olduğu gibi bırakın:

iptables -t raw -A PREROUTING -p tcp --dport 1723 -j CT --helper pptp

İkinci seçenek tercih edilir. Otomatik atamayı tüm yönlendiricide yeniden etkinleştirmek yerine davranışı PPTP trafiğiyle sınırlar.

Portu olmayan bir protokolü açmak

1723'e izin veren bir güvenlik duvarı kuralı protokol 47 hakkında hiçbir şey söylemez. firewalld'de protokole istemciye bakan bölgede izin verin. Düz iptables'da gre protokolünü giriş zincirinde kabul edin.

Sonra iki tarafta da yakalayın. İstemciden çıkan paketlere yanıt gelmemesi dönüş yolunun filtrelendiği anlamına gelir ve bu, reddedilen kimlik bilgisinden farklı bir arızadır.

Bağlandıktan sonra boyut sınırı

GRE bir başlık ekler ve içindeki PPP daha fazlasını ekler, bu yüzden çalışan bir bağlantı 1500'ün epey altında bir MTU bildirir. Küçük yanıtlar yüklenir ve büyükler takılır, bu da ilk sorun çözüldüğü anda ortaya çıkan ikinci ve ilgisiz bir sorun gibi görünür.

İstemcinin PPP bağdaştırıcısındaki MTU'yu okuyun ve yönlendiricinin kendi hesabıyla uyumlu hale getirin bir şey çalışana kadar sayıları düşürmek yerine. Tam boyutlu paketler çıkıp hiçbir şey dönmezse bu çeviriye değil, o sınıra işaret eder.

Yolu onarmak kullanıcıyı çalışır hale getirir ve bu PPTP'yi iyi bir seçim yapmaz. MS-CHAPv2 ve RC4 çoktan kullanımdan kalkmıştır, bu yüzden modül yüklemeyi geçici bir düzeltme olarak görün ve bakımı sürdürülen bir protokole geçiş planlayın.

İlgili makaleler