Есть ли способ сделать IP-адрес WSL2 статическим? Я читал об этом, и мне сказали, что нет возможности сделать IP статическим, а есть ли способ установить соединение SecureCRT с WSL2 без изменения IP-адреса в конфигурациях, чтобы мне не приходилось повторно вводить ip каждый раз?
2 ответа
Решение не переделывать все заново с новым IP-адресом находится в посте
WSL 2 NIC Bridge mode # 4150.
К сожалению, решение состоит только в том, чтобы переложить эту работу на скрипт, который запускается автоматически после каждого входа в систему.
Описание проблемы:
Решение — перенаправить TCP-порты служб WSL 2 в ОС хоста.
Виртуальный адаптер на машине WSL 2 меняет свой IP-адрес во время перезагрузки, что затрудняет реализацию решения для однократного запуска.
Также обратите внимание, брандмауэр Windows заблокирует перенаправленный порт.
Решение — написать сценарий PowerShell, который:
- Получить IP-адрес машины WSL 2
- Удалить предыдущие правила переадресации портов
- Добавить правила переадресации портов
- Удалить ранее добавленные правила брандмауэра
- Добавить новые правила брандмауэра
Сценарий также удаляет ненужные правила брандмауэра.
Вот сценарий, скопированный из этого поста:
$remoteport = bash.exe -c "ifconfig eth0 | grep 'inet '"
$found = $remoteport -match 'd{1,3}.d{1,3}.d{1,3}.d{1,3}';
if( $found ){
$remoteport = $matches[0];
} else{
echo "The Script Exited, the ip address of WSL 2 cannot be found";
exit;
}
#[Ports]
#All the ports you want to forward separated by coma
$ports=@(80,443,10000,3000,5000);
#[Static ip]
#You can change the addr to your ip config to listen to a specific address
$addr="0.0.0.0";
$ports_a = $ports -join ",";
#Remove Firewall Exception Rules
iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' ";
#adding Exception Rules for inbound and outbound Rules
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Outbound -LocalPort $ports_a -Action Allow -Protocol TCP";
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Inbound -LocalPort $ports_a -Action Allow -Protocol TCP";
for( $i = 0; $i -lt $ports.length; $i++ ){
$port = $ports[$i];
iex "netsh interface portproxy delete v4tov4 listenport=$port listenaddress=$addr";
iex "netsh interface portproxy add v4tov4 listenport=$port listenaddress=$addr connectport=$port connectaddress=$remoteport";
}
Вам необходимо запланировать запуск сценария после входа в систему следующим образом:
Заходим в поиск, ищем планировщик задач. В меню действий справа нажмите на создание задачи.
Введите Имя, перейдите на вкладку триггеров. Создайте новый триггер с начальной задачей при входе в систему, установите задержку на 10 секунд.
Заходим в действия и добавляем скрипт. Если вы используете ноутбук, перейдите в настройки и включите запуск от питания.
Если вам просто нужен ssh соединение / протокол для SecureCRT, который вы указали в комментариях, то есть альтернатива переадресации портов:
- Установите Windows OpenSSH server (направления работает на порту 22.
- Установите для порта sshd WSL2 другое значение (например, 2222) в
/etc/ssh/sshd_config - Используйте хост Windows в качестве промежуточного узла, используя преимущества WSL2.
localhostПеренаправление порта. Т.е.ssh -o "ProxyCommand ssh -W %h:%p windowshost.local" -o "StrictHostKeyChecking=no -p 2222 localhost(замените «windowshost» на имя вашей машины).
Это работает, потому что по умолчанию Windows обнаруживает службы, запущенные в экземплярах WSL2, и пересылает localhost связи с ними.
Это, конечно, предполагает, что SecureCRT может использовать ProxyCommand.
здесь это информация о ProxyCommand.
— Рамхаунд
2 августа в 21:28

Вам нужно добавить порт 22, если вы хотите войти через ssh с IP 0.0.0.0?
— цезарь
4 августа в 21:07
Да, добавить порт в список портов.
— harrymc
5 августа в 5:58
Но это не работает.
— цезарь
5 августа в 14:45
Мне нужно внести какие-либо изменения? Кажется, подключается к внешнему ip, когда я ввожу 155.12.12.12 вместо подключения к 155.12.12.12 в локальной сети.
— цезарь
5 августа в 20:15
Не работает. Я сделал: ip addr show eth0 | awk ‘$ 1 == «inet» {gsub (//.*$/, «», $ 2); print $ 2} ‘и я получаю: 172.14.112.11
— цезарь
5 августа в 21:03
Показать 1 больше комментариев