refactor(wsl): добавлена поддержка режима Mirror для WSL2

- Зачем:
  - новый режим networkingMode=mirror в WSL2 требует другого подхода к определению IP-адреса хоста.
- Что:
  - добавлено определение режима WSL через проверку .wslconfig.
  - при режиме mirror IP берется из Windows hosts файла.
  - при режиме NAT IP вычисляется через маршрут по умолчанию.
  - добавлена очистка символов \r при чтении Windows файлов.
  - улучшены информативные сообщения для пользователя.
- Проверка:
  - вызов функции update_hproxy в обоих режимах WSL2.
This commit is contained in:
ddadmin committed 2026-02-24 10:29:49 +03:00
1 parent f865bea0ee
commit 39d1d8636e
1 file changed
+27 -4
+27 -4
View File
@@ -7,15 +7,38 @@
update_hproxy() { update_hproxy() {
echo "🔄 Обновление IP-адреса для hproxy.local..." echo "🔄 Обновление IP-адреса для hproxy.local..."
# Получаем текущий IP хоста local host_ip=""
local host_ip=$(ip route show default | awk '{print $3}') local wslconfig=$(ls /mnt/c/Users/*/.wslconfig 2>/dev/null | head -n 1)
local win_hosts="/mnt/c/Windows/System32/drivers/etc/hosts"
# Проверяем наличие параметра networkingMode=mirror в конфиге Windows
if [ -f "$wslconfig" ] && grep -qiE '^[[:space:]]*networkingMode[[:space:]]*=[[:space:]]*mirror' "$wslconfig"; then
echo "🔍 Обнаружен режим Mirror."
# Читаем hosts из Windows
if [ -f "$win_hosts" ] && grep -qiw "hproxy.local" "$win_hosts"; then
# Извлекаем IP (первый столбец) и чистим от виндовых символов возврата каретки (\r)
host_ip=$(grep -iw "hproxy.local" "$win_hosts" | awk '{print $1}' | tr -d '\r' | head -n 1)
echo "📂 Взят IP из Windows hosts: $host_ip"
else
# Фолбэк на случай, если записи в Windows нет
host_ip="127.0.0.1"
echo "⚠️ Запись hproxy.local в Windows hosts не найдена, используем дефолтный $host_ip"
fi
else
echo "🔍 Обнаружен режим NAT."
# Формируем IP на лету из маршрута по умолчанию
host_ip=$(ip route show default | awk '{print $3}')
echo "🌐 Вычислен IP шлюза WSL: $host_ip"
fi
if [ -z "$host_ip" ]; then if [ -z "$host_ip" ]; then
echo "❌ Ошибка: Не удалось определить IP-адрес хоста." echo "❌ Ошибка: Не удалось определить IP-адрес."
return 1 return 1
fi fi
# Удаляем старую запись и добавляем новую (потребуется пароль sudo) # Обновляем /etc/hosts в Ubuntu
sudo sed -i '/hproxy.local/d' /etc/hosts sudo sed -i '/hproxy.local/d' /etc/hosts
echo "$host_ip hproxy.local" | sudo tee -a /etc/hosts > /dev/null echo "$host_ip hproxy.local" | sudo tee -a /etc/hosts > /dev/null