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

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

2 ответа
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 секунд.
Заходим в действия и добавляем скрипт. Если вы используете ноутбук, перейдите в настройки и включите запуск от питания.

  • Вам нужно добавить порт 22, если вы хотите войти через ssh с IP 0.0.0.0?

    — цезарь
    4 августа в 21:07

  • 1

    Да, добавить порт в список портов.

    — 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

Если вам просто нужен 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *