JConsole kayıt defterine bağlanır, sonra RMI onu başka yere gönderir
Kayıt defteri portunun yanıt vermesi yalnızca ilk atlamadır. Uzak bir JMX sunucusu başka bir ana bilgisayar ve başka bir bağlayıcı portu duyurabilir, tünelin her ikisine de ulaşması gerekir.
Tünel üzerinden kayıt defteri portuna bağlanın, el sıkışmanın başlamasını izleyin ve ardından JConsole'un yine de zaman aşımına uğradığını görün. Bunun nedeni ilk TCP bağlantısının yönetim bağlantısı değil, bir arama olmasıdır. RMI kayıt defteri, bir ana bilgisayar ve ikinci bir port belirten bir referansla yanıt verir ve JConsole ardından kendisine söylenen yere gider. Tünel yalnızca sunucunun ilk portuna ulaşıyorsa veya referans yalnızca sunucunun kendi yerel ağında bulunan bir adresi gösteriyorsa, istemci görünüşte başarılı olduktan sonra takılır.
Efsane: bir açık port bir bağlantıdır
RMI üzerinden uzak JMX en az iki uç nokta içerir ve bunlar sistemin farklı parçaları tarafından seçilir. Kayıt defteri portu istemciye yazdığınız porttur ve gerçek bağlayıcıyı tanımlayan stub'ı vermek için vardır. İlk başarılı soketi yönetim yolunun açık olduğunun kanıtı saymak, iki dakikalık bir teşhisi güvenlik duvarı biletleriyle dolu bir öğleden sonraya çevirir.
Sunucunun dinleyici listesine değil, istemcinin kendi hatasına bakın. El sıkışma başladıktan sonraki bir hata, ilk değil ikinci bağlantının tamamlanmadığını söyler.
Kayıt defteri ne döndürür
Stub, bağlayıcı oluşturulduğu anda serileştirilmiş bir adres ve port içerir. Birden çok arayüze sahip bir sunucuda yığın, yerel ağdan erişilebilen ama sizinkinden erişilemeyen bir adres seçmiş olabilir. İstemci farkı bilmez; aldığı değeri çevirir ve paket o adres için var olan rotayı izler, bir VPN istemcisinde bu çoğu zaman hiç yoktur. İkinci bağlantının denendiği an burasıdır.
Hatanın ortamlar arasında düzensiz olmasının nedeni de budur: aynı sunucu, JMX yapılandırmasında hiçbir değişiklik olmadan yerel ağdaki bir kullanıcı için ve tüneldeki bir kullanıcı için farklı davranabilir.
İki port ve onları sabitleyen iki özellik
Kayıt defteri portu com.sun.management.jmxremote.port ayarından gelir ve bağlayıcı, yığının ayırdığına bırakılmak yerine com.sun.management.jmxremote.rmi.port ile sabitlenebilir. İstemci ile sunucu arasında bir güvenlik duvarı veya güvenlik grubu varsa ikisini de açıkça ayarlayın, çünkü öngörülemeyen ikinci bir port önceden izin verilemez ve onu karşılamak için açılan geniş bir aralık tek bir değeri sabitlemekten daha kötüdür.
Ardından sunucuda ss -ltn veya netstat -an ile her iki portun dinlemede olduğunu ve hangi adreslerde olduğunu doğrulayın. Loopback'e bağlı bir dinleyici yalnızca yerel dağıtım için doğrudur ve bunun için işe yaramaz.
Duyurulan ad yanlış olduğunda
Uzak referanstaki ana bilgisayar adı java.rmi.server.hostname tarafından ayarlanır. Stub'ın ne duyuracağını etkiler; kendi başına her dinleyiciyi tek bir arayüze bağlama talimatı değildir, bu yüzden ayarlanması her zaman beklenen tek port davranışını üretmez. Ayarı yapın, süreci yeniden başlatın ve ardından stub'ın gerçekte ne içerdiğini doğrulayın. İstemcinin çözebileceği ve tünelden ulaşabileceği bir ad veya adres seçin ve stub'ın yeniden oluşturulması için süreci yeniden başlatın.
Konteyner ağları bunu daha da kötüleştirir, çünkü sürecin gördüğü adres, konteyner dışından hiçbir şeyin yönlendiremeyeceği dahili bir adres olabilir. Platformun seçmesine izin vermek yerine amaçlanan ana bilgisayar adını açıkça yayınlayın.
VPN yerine SSH ile tünel kuruyorsanız aynı sorun başka bir kılıkta ortaya çıkar: yalnızca kayıt defteri portunu iletmek, ikinci uç noktayı istemcinizin ulaşamayacağı bir adrese yöneltilmiş bırakır. Her iki portu da iletin ve duyurulan adın istemcinin yerel olarak ulaşabileceği bir şeye çözümlenmesini sağlayın.
Basitleştirmek için yönetim güvenliğini kapatmayın
Kimlik doğrulamayı ve TLS'i kapatan parçacıklar kolayca bulunur ve bağlantıyı daha sonra geri almanız gereken bir şekilde çalıştırır. Uzak JMX, denetlediği süreçle aynı ayrıcalıklara sahip bir yönetim arayüzüdür; erişim denetimlerini koruyun ve istemci kimlik bilgileri sunamıyorsa bunu düzeltin.
Uç noktalar doğru olduğunda, gördüğünüz bir sonraki hatayı saklayın. Bir güven deposu veya hesap reddi, ulaşılamayan bir bağlayıcıdan daha sonraki bir aşamadır ve ağ işinin bittiği anlamına gelir.