Как создать соединение SecureCRT для подключения к WSL2, не меняя каждый раз IP-адрес?

Как создать соединение SecureCRT для подключения к WSL2, не меняя каждый раз IP-адрес?

Есть ли способ сделать IP WSL2 статическим? Я читал об этом, и мне сказали, что нет способа сделать IP статическим, тогда есть ли способ сделать соединение SecureCRT с WSL2 без необходимости менять IP-адрес в конфигурациях, чтобы мне не приходилось каждый раз вводить IP заново?

решение1

Решение, чтобы не переделывать все заново с новым IP-адресом, можно найти в посте
Режим моста WSL 2 NIC #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 с.
Перейдите в действия и добавьте сценарий. Если вы используете ноутбук, перейдите в настройки и включите функцию «Запуск при включении питания».

решение2

Если вам просто нужно sshсоединение/протокол для SecureCRT, о котором вы указывали в комментариях, то есть альтернатива переадресации портов:

  • Установить сервер Windows OpenSSH (направленияработает на порту 22.
  • Установите порт WSL2 sshd на что-то другое (например, 2222) в/etc/ssh/sshd_config
  • Используйте хост Windows в качестве jumphost, воспользовавшись localhostпереадресацией портов WSL2. То есть ssh -o "ProxyCommand ssh -W %h:%p windowshost.local" -o "StrictHostKeyChecking=no -p 2222 localhost(замените «windowshost» на имя вашей машины).

Это работает, поскольку по умолчанию Windows обнаруживает службы, работающие в экземплярах WSL2, и перенаправляет localhostим соединения.

Конечно, это предполагает, что SecureCRT может использовать ProxyCommand.

Связанный контент