Softethervpn: NicSetSetting: изменение MAC-адреса не вступает в силу до ручного перезапуска VPN-клиента.

Созданный на 28 авг. 2015  ·  4Комментарии  ·  Источник: SoftEtherVPN/SoftEtherVPN

Я использовал NicSetSetting для установки MAC-адреса виртуальных сетевых адаптеров, присоединяющихся к концентратору. Я использовал статическую аренду, поэтому MAC-адрес эффективно определяет IP-адрес, который должен получить сетевой адаптер.

Однако я заметил, что изменение MAC-адреса, хотя оно и записано в данных Softether, не отражается в реальной ОС до перезапуска самого VPN-клиента. Это означает, что при первом контакте мои сетевые адаптеры настроены с неправильными IP-адресами.

Я также пробовал:

  • Включение и отключение сетевой карты
  • Установка несколько раз
  • Отключение любых учетных записей, а затем повторное подключение.

Однако у меня работает только vpnclient stop && vpnclient start . Я использую два отдельных клиента:

  • Версия 4.17, сборка 9562 на Debian Wheezy
  • Версия 4.18, сборка 9570 на Raspbian

Оба демонстрируют одинаковое поведение. Это ошибка или особенность?

bug help wanted

Самый полезный комментарий

@ moatazelmasry2 На самом деле я не специалист по C ++, но мне кажется, что проблема заключается в коде здесь или вокруг него:

https://github.com/SoftEtherVPN/SoftEtherVPN/blob/bed99f9a56e29a0fcd7a9e3d02f84f9d8621eb3d/src/Cedar/Client.c#L8104

r в данном случае является результатом r = Search(c->UnixVLanList, &t); . После этого есть вызовы CiSaveConfigurationFile и CiNotify и CiSendGlobalPulse - ни один из которых, похоже, не делает ничего особенного на уровне ОС. Так, может быть, он просто устанавливает MAC во внутреннем списке, сохраняет его в конфигурации, а затем фактически не пытается обновить виртуальный адаптер?

Когда клиент перезапускается, конечно, он правильно инициализирует адаптер с тем, что он находит в конфигурации.

Рассматривая далее инициализацию устройства TAP для виртуальной сетевой карты, мы видим эту строку, которая, кажется, устанавливает MAC-адрес при инициализации:

https://github.com/SoftEtherVPN/SoftEtherVPN/blob/d7d0e6d36fe1d73eca6205d9b2144ded67f52b13/src/Cedar/VLanUnix.c#L527

Это функция под названием UnixCreateTapDeviceEx - так что я думаю, что нам нужен вызов UnixModifyTapDevice , который на самом деле вызывает ioctl с новым MAC? Учитывая, что этого еще не существует, возможно, на это есть веская причина!

Все 4 Комментарий

Не могли бы вы убедиться, что эта проблема все еще возникает?

@ moatazelmasry2 Извините за медленный ответ. Не принимал Softether несколько месяцев.

Сегодня я посмотрел на это.

  • Я настраиваю сервер и клиент
  • Подключил клиента
  • Проверил MAC-адрес, который был 00: AC: B2: 5A: 26: 93
  • Авторизовался в vpncmd и запустил NicSetSetting ether MAC: / 00-AC-BA-B5-B4-78.
  • Вышел из vpncmd и запустил ifconfig. Все еще показывает MAC, заканчивающийся на 93
  • Перезапущен vpnclient
  • Запустил ifconfig и теперь вижу MAC, заканчивающийся на 78

Так что, мне кажется, этот выпуск все еще актуален. Версии Сервера и Клиента были:

  • Клиент версии 4.24, сборка 9651 в Ubuntu 16.06
  • Версия сервера 4.24, сборка 9651 в Ubuntu 16.06

@ moatazelmasry2 На самом деле я не специалист по C ++, но мне кажется, что проблема заключается в коде здесь или вокруг него:

https://github.com/SoftEtherVPN/SoftEtherVPN/blob/bed99f9a56e29a0fcd7a9e3d02f84f9d8621eb3d/src/Cedar/Client.c#L8104

r в данном случае является результатом r = Search(c->UnixVLanList, &t); . После этого есть вызовы CiSaveConfigurationFile и CiNotify и CiSendGlobalPulse - ни один из которых, похоже, не делает ничего особенного на уровне ОС. Так, может быть, он просто устанавливает MAC во внутреннем списке, сохраняет его в конфигурации, а затем фактически не пытается обновить виртуальный адаптер?

Когда клиент перезапускается, конечно, он правильно инициализирует адаптер с тем, что он находит в конфигурации.

Рассматривая далее инициализацию устройства TAP для виртуальной сетевой карты, мы видим эту строку, которая, кажется, устанавливает MAC-адрес при инициализации:

https://github.com/SoftEtherVPN/SoftEtherVPN/blob/d7d0e6d36fe1d73eca6205d9b2144ded67f52b13/src/Cedar/VLanUnix.c#L527

Это функция под названием UnixCreateTapDeviceEx - так что я думаю, что нам нужен вызов UnixModifyTapDevice , который на самом деле вызывает ioctl с новым MAC? Учитывая, что этого еще не существует, возможно, на это есть веская причина!

Еще не проверял, но это похоже на очень хороший анализ. Солидная работа !!!. Теперь нам нужно, чтобы кто-то это реализовал :)

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

TheNomad11 picture TheNomad11  ·  5Комментарии

Adrian-Voelker picture Adrian-Voelker  ·  16Комментарии

yurivict picture yurivict  ·  7Комментарии

renatosc picture renatosc  ·  3Комментарии

paskal picture paskal  ·  12Комментарии