karlos (Mehmet Demir)

love, hack, eat, sleep, repeat.

WSL2’ye Çoklu Host Ağ Arayüzlerini Kolayca Eklemek

Günümüzde hangi amaca hizmet ediyor olursak olalım, geliştirme veya güvenlik testi ortamlarında çalışırken verimlilik kadar hız ve pratiklik de büyük önem taşıyor. Eskiden, sektörün daha yavaş ilerlediği zamanlarda bir sanal makinenin boot süresi, bir aracın getirdiği çıktı süresi veya tüm bunların pratikliği çok da önemsenmezken; günümüzde bir bug ararken bile onu ilk bulan kişi olmak büyük bir önem arz ediyor. Bu da sektörde hızlı ve pratik çözümlere olan ihtiyacı artırıyor. Hem insan kaynağı hem donanım kaynağı daha sınırlı şekilde paylaştırılıyor. Bu noktada, bu ihtiyaca büyük oranda cevap veren ve hâlâ aktif olarak geliştirilmekte olan WSL2, birçok avantaj sunmasına rağmen bazı durumlarda çalışma ortamlarına tam uyum sağlayamayabiliyor. Ancak bu sorunları çözümleyebiliyor olmak bizi ekstra bir VM ihtiyacından kurtarıyor.

WSL2 varsayılan olarak birçok networking modu sunuyor; ancak bu modların hiçbiri, ağlara çoklu şekilde dahil olma veya port dinlemeler için ayrı bir interface olarak tanınma ihtiyacını ne yazık ki karşılamıyor. Görsel 1ʼde de paylaştığım üzere dantmnf tarafından açık kaynaklı olarak üretilen bir araç sayesinde, iç ağlarımızı WSL’e nasıl tanıttığımızı adım adım göstereceğim.

İlk olarak, .wslconfig dosyamızda networking ile ilgili ayarlarımızı doğru yaptığımıza emin olmalıyız. Daha önce bir ayar yaptıysanız ayar dosyanıza %USERPROFILE%/.wslconfig dizininden erişebilirsiniz. Bu dosyanın var olmaması daha önce ekstra bir ayar yapmadığınız anlamına gelir. İlgili dosyayı açıp aşağıdaki satırları ekliyoruz. Bu aşama WSL2’nin DNS portunu tutmaması için önemli.

dnsTunneling = false
firewall = true

Dosyayı kaydettikten sonra PowerShell üzerinden wsl --shutdown komutunu çalıştırıp ardından WSL’i tekrardan çalıştırmalıyız. Benim ayarlarımda ilk satırda kernel ile ilgili bir ayar bulunmakta, o satırı yok sayabilirsiniz.

Sonraki aşamada, başlat menüsünden Hyper-V Yöneticisine ulaşıyoruz. İlgili arayüzden Sanal Anahtar Yöneticisi seçeneğine tıklıyoruz.

Bu arayüzde gördüğümüz ağlar Hyper-V’nin kendi dahili ağları. Yeni Sanal Ağ anahtarı seçeneğinden Dış seçeneğini kullanarak bir ağ oluşturacağız.

Bu ağa bir isim verip, Dış ağ: kısmından hangi adaptöre bağlamak istediğimizi seçip onaylıyoruz. Hyper-V’ye bağlı olan sunucularınızın değişikliklerden etkilenebileceğiyle ilgili bir uyarı gelebilir, çalıştığınız ortama göre bu uyarıyı görmezden gelebilirsiniz.

Bağlamak istediğimiz 2. adaptör için yeni bir ağ oluşturup onu da istediğimiz adaptöre bağlıyoruz. Ben VMWare ağı ile iletişim kurmayı ve dinleme yapabilmeyi istediğim için VMWare’ye bağlı olan adaptörü seçeceğim.

Bu aşamada istediğiniz kadar ağ oluşturabilirsiniz. Sonrasında, WSLAttachSwitch reposundan Releases kısmındaki WSLAttachSwitch.exe uygulamasını indiriyoruz. Güvenlikle ilgili endişeleriniz varsa kendiniz compile edebilirsiniz. Tamamen açık kaynaklı bir araç.

Ağa koyduğunuz isme göre terminal üzerinden

WSLAttachSwitch.exe eth1
WSLAttachSwitch.exe eth2

komutlarını çalıştırıyoruz.

Not: Bu aşamada --mac ve --vlan parametrelerini kullanarak spesifik tanımlamalar yapabilirsiniz.

WSL üzerine geri döndüğümüzde ve ip addr komutunu çalıştırdığımızda 2 adet arayüzün cihaza donanımsal bağlanmış olarak göründüğünü gözlemleyebiliriz.

Her bir arayüz için ifconfig interfacename up komutunu çalıştırıyoruz.

DHCP aktif olan ağlar için dchlient interfacename komutunu çalıştırıyoruz.

Hata vermiş gibi gözükse bile komut çalışacaktır.

DHCP aktif olmayan ağlar için manual ip ataması yapıyoruz.

Bu aşamada bağlantılarımız tamamlanmış ve teste hazır hâle geliyor. Normal şartlarda, WSL üzerinde Responder gibi araçları ağ kısıtlamaları nedeniyle çalıştıramıyoruz, yaptığımız bu ortam düzenlemesi sayesinde artık bu tür araçları sorunsuz şekilde kullanmak mümkün olacaktır.

Eth2 üzerinde Responder‘i çalıştırıyoruz.

Not: WSL yeniden başlatıldığında ağlar WSL üzerinden kaybolacaktır. WSLAttachSwitch.exe uygulamasını kullanarak tekrardan WSL üzerine bağlanmalarını sağlayabilirsiniz. İsterseniz scripting ile bu işi otomatize bir hâle getirebilirsiniz. Ben bu adımı .bashrc üzerinden aşağıdaki gibi bir kontrol ile gerçekleştirdim.

Umarım bu yazım işinize yaramıştır. LinkedIn ve Email üzerinden görüşlerinizi ve sorularınızı iletebilirsiniz.

Destekleri için Melanie’ye teşekkürler <3