Android üzerindeki OpenVPN profiliniz rota ekleyemiyor çünkü telefonun sanal arayüzde bir adresi yok, dolayısıyla rotanın işaret edebileceği bir şey bulunmuyor. Rotalar yalnızca paketlerin nereye gitmesi gerektiğini yanıtlar. Tünel adresi telefonun tünelin içinde kim olduğunu yanıtlar ve arayüz var olabilmeden önce istemcinin bir tane sağlaması gerekir. Aşağıdaki dört kontrolü sırayla yapın ve ilk hatada durun, çünkü adres var olmadan rotaları düzenlemek gerçek sorunu gizler.

Hatayı istemcinin yürüttüğü sırayla okuyun

Android'in VpnService.Builder sınıfı iki kavramı ayrı tutar: addAddress() uygulamanın kurduğu arayüze adres koyar, addRoute() hedef ön ekini ekler ve establish() en az bir adres eklenene kadar arayüzü oluşturmayı reddeder. OpenVPN istemcisi profili ve sunucunun gönderdiği seçenekleri tam olarak bu çağrılara eşler, bu yüzden adresi hiç ayrıştırmayan bir bağlantı arayüzü hiç kuramaz.

Okuduğunuz günlük satırının bir rotadan söz etmesinin ama nedenin bir adım önce olmasının sebebi budur. İstemci rota aşamasına ancak arayüz var olduktan sonra ulaşır; adres yoksa rota çağrısı hemen başarısız olur ya da hiç çalışmaz. Günlük rota ekleyemediğini söylediğinde rota sözdiziminden değil adresten başlayın.

Kontrol 1: sunucu yanıta bir adres koyuyor mu?

Yönlendirilen bir OpenVPN hizmetinde adres sunucu havuzundan ya da istemci başına atamadan gelir ve şeklini topoloji belirler. OpenVPN 2.4 veya daha yeni bir sunucuda alt ağ topolojili bir hizmet şöyle görünür:

topology subnet
server 10.8.0.0 255.255.255.0
client-config-dir ccd

Bu şekille sunucu ifconfig 10.8.0.6 255.255.255.0 benzeri bir şey gönderir. Daha eski bir topology net30 kurulumu bunun yerine eş adresi gönderir, örneğin ifconfig 10.8.0.6 10.8.0.5, bu yüzden iki model arasında taşınan profil doğru görünürken yanlış ağ maskesi taşıyabilir.

İstemcinin bağlantı günlüğünde gönderilen seçenek kümesini arayın. İçinde tek bir ifconfig satırı bile yoksa sunucu hiç adres göndermemiş ya da istemci seçeneği reddetmiştir. client-config-dir kullanan bir sunucuda sertifikanın common name adını taşıyan dosya bulunmalı ve atamayı içermelidir:

# ccd/phone-anna
ifconfig-push 10.8.0.6 255.255.255.0

Kontrol 2: istemci aldığı adresi koruyor mu?

Aşırı geniş bir filtre ikinci yaygın nedendir. pull-filter OpenVPN 2.4 ve daha yenilerinde vardır ve birden çok filtre aynı seçeneğe uyduğunda son uyan kazanır, bu yüzden sona konan catch-all adresi hatasız olarak kaldırır:

# removes every pushed option, including the address
pull-filter ignore "ifconfig"
pull-filter ignore "route"

Filtreyi gerçekten kurtulmak istediğiniz seçeneğe daraltın ve adresi olduğu gibi bırakın:

# keeps the pushed address, drops one unwanted LAN route
pull-filter ignore "route 10.60.0.0"

Tüm pull ayarlarını kapatma önerisi genellikle tek bir rotadan kurtulmak isteyen birinden gelir. route-nopull daha dar anahtardır: ifconfig ile diğer gönderilen seçenekleri korurken gönderilen rotaları ve DHCP benzeri seçenekleri reddeder. Gerçekten istediğiniz buysa kullanın ve adres sorusunu ayrı yanıtlayın.

Kontrol 3: adres sizin mi gireceğiniz bir değer?

Elle adres verme yalnızca işletmeci değeri size verdiğinde meşrudur. Kendiniz girerseniz adres VPN istemcisinin alt ağından gelmeli, etkin oturumlar arasında benzersiz olmalı ve sunucunun çalıştırdığı topolojiye uymalıdır. Masaüstü köprüsünün veya uzak LAN üzerindeki bir ana bilgisayarın adresini kopyalamak iki açıdan da başarısızdır: telefon başka yerde zaten var olan bir adresi talep eder ve ağ geçidinin ona dönüş yolu olmaz.

Bir rotadaki uzak LAN ön eki hedeftir, asla telefonun kimliği değildir. 10.60.0.0/24 için rota o ağa tünelden ulaşılacağını söyler; telefonun hangi 10.60.0.x adresini taşıması gerektiği hakkında hiçbir şey söylemez ve telefon bunların hiçbirini taşımamalıdır. Statik atamalar, dinamik havuzla çakışamayacakları sunucu tarafına aittir.

Tek kimlikte iki oturum aynı çakışmayı ortaya çıkarır. Aynı sertifika iki kez bağlanır ve sunucu ikisine de tek bir sabit adres gönderirse ikinci oturum birinciyi çoğaltır ve çözüm istemci tarafında düzenleme değil, ayrı kimlikler ya da ayrı atamalardır.

Kontrol 4: tünel yerini başka bir şey mi tutuyor?

Android aynı anda yalnızca bir etkin VPN hizmetine izin verir. Başka bir VPN uygulaması veya artık çalışmayan bir profil için açık bırakılmış her zaman açık VPN girdisi, OpenVPN istemciniz establish() çağırmadan önce o yeri alabilir. O zaman profil geçerli olsa bile arayüz hiç görünmez, bu yüzden diğer VPN'i kesin, her zaman açık ayarını kapatın ve profile dokunmadan önce yeniden bağlanın.

Ethernet köprüsünde ısrar eden bir hizmet diğer çıkmaz sokaktır. Root olmayan bir Android uygulaması IP tüneli kurabilir, köprülenmiş Ethernet segmenti kuramaz, bu yüzden yazdığınız hiçbir adres dev tap sunucusunu çalıştırmaz; işletmeci yönlendirilen bir hizmet sunmalıdır. Sorunu bildirirken istemci adını ve sürümünü, gönderilen seçenek kümesini, topolojiyi ve adresin görünmesi gereken tam adımı ekleyin.

Dört kontrolün hepsi geçerse ve adres mevcut, benzersiz ve doğru maskelenmişse rota sorusu olağan hale gelir: sunucunun hangi ön eklere izin verdiği ve istemcinin bunları nasıl sınırlaması gerektiği. Başka bir şeyi değiştirmeden önce tünel adresini, ağ maskesini ve topolojiyi not edin, çünkü işletmecinin sunucu görünümüyle karşılaştırması gereken üç değer bunlardır.

İlgili makaleler