Виртуальное сетевой устройство с криптованием
Добавлено: 13 мар 2012, 13:40
Здравствуйте,
Передо мной поставлена довольно интересная задача. Суть состоит в том, чтобы реализовать кастомное шифрование сетевого трафика WiFi сети. Заказчик предполагает следующую схему:
1) Создать виртуальное сетевое устройство (напр. crypto0), собственно реализующее шифрование фреймов, эдакий аналог того WPA
2) Сетевое устройство должно работать поверх существующего wifi устройства (напр., wlan0).
3) wlan0 подключается к открытой WiFi сети стандартными средствами линукс ,в моем случае Андроид, такими как wpa_supplicant.
4) Cоздается виртуальное устройство crypto0 и оно назначается устройством по умолчанию. Весть исходящий трафик (IP, ARP,...), попадающий в это устройство, шифруется, передается в базовое устройство wlan0 и выдается в wifi сеть.
5) Аналогично, весь входящий трафик перехватывается на устройстве wlan0, расшифровывается и передается вверх по сетевому стеку.
Опыта кернел программирования у меня не много, но я нашел некоторые интересные кусочки, которые мне кажется можно будет как-то использовать
1) http://ar.linux.it/docs/vinter/vinter.html - устройство, которое дропит часть сетевого трафика при передаче в подчиненное устройство
2) http://netlab-mn.unipv.it/insane/ - Эта же разработка, но откомпилированная для 2.6 ядра
3) Имея небольшой опыт с 802.1 бриджами я сразу подумал о том что в ядре уже должна быть возможность перехвата входящих фреймов. Покопав код бриджа в ядре (net/bridge) я нашел интересную функцию netdev_rx_handler_register() которую можно зарегистрировать для подчиненного сетевого устройства и позволяющую перехватить трафик входящий в это устройство. Я написал маленький модуль, зарегистрировал netdev_rx_handler_register и в зарегистрированном обработчике действительно вижу входящие фреймы.
Подскажите, возможные пути реализации задания, на что надо обратить внимание, возможно есть существующие аналоги.
Спасибо.
Передо мной поставлена довольно интересная задача. Суть состоит в том, чтобы реализовать кастомное шифрование сетевого трафика WiFi сети. Заказчик предполагает следующую схему:
1) Создать виртуальное сетевое устройство (напр. crypto0), собственно реализующее шифрование фреймов, эдакий аналог того WPA
2) Сетевое устройство должно работать поверх существующего wifi устройства (напр., wlan0).
3) wlan0 подключается к открытой WiFi сети стандартными средствами линукс ,в моем случае Андроид, такими как wpa_supplicant.
4) Cоздается виртуальное устройство crypto0 и оно назначается устройством по умолчанию. Весть исходящий трафик (IP, ARP,...), попадающий в это устройство, шифруется, передается в базовое устройство wlan0 и выдается в wifi сеть.
5) Аналогично, весь входящий трафик перехватывается на устройстве wlan0, расшифровывается и передается вверх по сетевому стеку.
Опыта кернел программирования у меня не много, но я нашел некоторые интересные кусочки, которые мне кажется можно будет как-то использовать
1) http://ar.linux.it/docs/vinter/vinter.html - устройство, которое дропит часть сетевого трафика при передаче в подчиненное устройство
2) http://netlab-mn.unipv.it/insane/ - Эта же разработка, но откомпилированная для 2.6 ядра
3) Имея небольшой опыт с 802.1 бриджами я сразу подумал о том что в ядре уже должна быть возможность перехвата входящих фреймов. Покопав код бриджа в ядре (net/bridge) я нашел интересную функцию netdev_rx_handler_register() которую можно зарегистрировать для подчиненного сетевого устройства и позволяющую перехватить трафик входящий в это устройство. Я написал маленький модуль, зарегистрировал netdev_rx_handler_register и в зарегистрированном обработчике действительно вижу входящие фреймы.
Подскажите, возможные пути реализации задания, на что надо обратить внимание, возможно есть существующие аналоги.
Спасибо.