Добро утро хора,
Опитах се да модифицирам проба на VPN (ToyVPN), за да работи като обикновена защитна стена, за да блокира част от изходящия трафик. Реших да го направя по следния начин:
- Създайте VPN връзка само за някои IP адреси
- Не правете нищо в кода за обработка на VPN :)
Което изглежда по-лесно от оценката на пакетите и действието според тяхното съдържание.
Това изглежда работи добре за Android 4.3, но на 4.4 получавам грешка:
...
09-03 06:02:11.340 1806-1897/com.example.android.toyvpn E/ToyVpnService﹕ Got java.lang.IllegalStateException: command '43 interface fwmark rule add tun0' failed with '400 43 Failed to add fwmark rule (No such device)'command '43 interface fwmark rule add tun0' failed with '400 43 Failed to add fwmark rule (No such device)'
...
Ето моя код на VpnService Builder:
Builder builder = new Builder();
builder.setMtu(30000);
builder.addAddress("10.0.0.1",24);
builder.addRoute("212.77.100.101",32); // this is a sample IP I use for tests
mInterface = builder.setSession(mServerAddress)
.setConfigureIntent(mConfigureIntent)
.establish();
Стартирайте кода, който имам, не прави нищо:
while (true){
Thread.sleep(1000);
Log.e(TAG,"Running");
}
В резултат получавам това, което искам - трафикът към моя ръчно въведен IP се насочва към /dev/null тип интерфейс :)
Вярвам, че проблемът ми с KitKat е свързан с някои грешки/проблеми в Android 4.4 (напр. https://code.google.com/p/android/issues/detail?id=63349, но има повече свързани с VPN).
Но знам, че това, което се опитвам да постигна, е изпълнимо - https://play.google.com/store/apps/details?id=com.netspark.firewall е доказателство, че работи добре на моя телефон 4.4. И се прави чрез VpnService, тъй като при използване на това приложение се появява същият изскачащ VPN прозорец.
Бихте ли ми помогнали да разбера какво правя погрешно и как да накарам VpnService да работи на 4.4 ... всъщност не да правя VPN, а по-скоро просто защитна стена.
Всичко това се отнася за нерутирани устройства.
PS. Има ли някакво ограничение за броя IP (IP подмрежи), които мога да добавя към VpnService по този начин?