Netsh interface portproxy delete v4tov4 не удается найти указанный файл

Обновлено: 04.07.2024

Я хочу указать имена хостов с двумя разными портами в hosts файле Windows .

Есть ли способ сделать это? Или это не разрешено самой Windows?

Я трачу свое время на поиски решения в течение последних 8 часов.

Можно ли указать порты в файле хоста hosts ? Например: 127.0.0.1:80 и 127.0.0.1:9211

Просто используйте IP-адреса без портов. Пример:

Затем для доступа к 192.168.2.50:5555 из вашего браузера (или другой программы):

hosts Файл можно найти по адресу:

Linux /etc/hosts

Windows : C:\Windows\System32\drivers\etc\hosts

Будет полезно добавить как путь, так и имя файла для редактирования. Можете ли вы обновить с указанием причины НЕ указывать номер порта при редактировании файла в C:\Windows\System32\drivers\etc\hosts ?

Вы не можете связать номер порта с именем хоста, сопоставленным с IP в файле hosts. Вы можете достичь этого с помощью Fiddler, используя FiddlerScript:

Хорошее предложение для технических пользователей. Просто чтобы прояснить: 1) Сначала установите Fiddler 2) Затем откройте его и перейдите в меню «Правила» и выберите пункт «Настройка правил» (или нажмите Ctrl + R в окнах). Это откроет файл JS в блокноте. 3) Найдите статическую функцию OnBeforeRequest и вставьте скрипт, предложенный @John, в его тело. Также HostNameIs не будет работать, это должны быть HostnameIs. Надеюсь это поможет. Вам известна какая-либо альтернатива с открытым исходным кодом (james, owasp zap или другая), которая может использоваться для того же эффекта?
  • hosts Файл только для разрешения имен
  • Браузер , при отсутствии непосредственно с указанием порта: то есть <hostname>:<port> , по умолчанию порт 80

Сценарий типичной проблемы

    приложения обычно устанавливают свои серверы на тот же адрес IP по умолчанию 127.0.0.1 ака localhost (определенного в файле хостов) .

чтобы избежать коллизий между, возможно, другими существующими / работающими серверами, приложение, как правило, позволяет изменить порт, но не IP-адрес.

2а. Если бы вы могли изменить ip-адрес сервера на другой в зарезервированном адресном пространстве loopback 127.0.0.0/8 , вы, вероятно, не пытались бы устанавливать порты в файле hosts.

Возможное решение

Вы можете обойти это, используя Windows Networking Network netsh в качестве прокси порта.

обзор

действия

  • Запустите свой сервер на localhost:8081
  • Добавьте "локальный DNS" в файл hosts в качестве новой строки
    • 127.65.43.21 example.app
      • Любой свободный адрес в сети 127.0.0.0/8 может быть использован.
      • Примечание: я предполагаю, 127.65.43.21:80 что не занят другой службой.
      • Вы можете проверить с netstat -a -n -p TCP | grep "LISTENING"
      • netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.65.43.21 connectport=8081 connectaddress=127.0.0.1

      Примечания:
      - Эти команды / изменения файла должны выполняться с правами администратора.

      - netsh portproxy нуждается в библиотеках ipv6 даже только для использования v4tov4, обычно они также будут включены по умолчанию, в противном случае установите их с помощью следующей команды: netsh interface ipv6 install

      Вы можете увидеть запись, которую вы добавили с помощью команды:

      netsh interface portproxy show v4tov4

      Вы можете удалить запись с помощью следующей команды:

      netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.65.43.21

      Ссылки на ресурсы:

      Примечание: этот ответ является дублированием моего ответа, который обсуждался в этом аналогичном вопросе / ответе по stackoverflow.

      date

      28.08.2020

      directory

      Windows 10, Windows Server 2016

      comments

      комментария 62

      В Linux перенаправление портов настраивается довольно просто с помощью iptables. На серверных системах Windows Server для настройки перенаправления портов, как правило используется служба маршрутизации и удаленного доступа (RRAS). Однако есть более простой способ настройки проброса портов, который одинаково хорошо работает в любой версии Windows.

      Как включить перенаправления портов в Windows 10 с помощью netsh portproxy?

      Настройка перенаправления портов в Windows выполняется из командой строки через режим Portproxy команды Netsh. Синтаксис команды следующий:
      netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport
      где,

      С помощью опций netsh interface portproxy add v4tov6 / v6tov4 / v6tov6 можно создавать правила порт форвардинга между IPv4 и IPv6 адресами. Примечание. Обратите внимание, что номер локального порта, который вы указали в listenport не должен быть занят (слушаться) другой службой. Проверьте, что номер порта свободен командой:

      netstat -na|find "3340"

      Либо вы можете проверить что порт не слушается локально с помощью PowerShell командлета Test-NetConnection:

      Test-NetConnection -ComputerName localhost -Port 3340

      проверка доступности локального порта в windows

      netsh interface portproxy - правило перенаправления портов Windows

      Чтобы создать правило перенаправления порта, запустите командную строку с правами администратора и выполните команду:
      netsh interface portproxy add v4tov4 listenport=3340 listenaddress=10.10.1.110 connectport=3389 connectaddress=10.10.1.110

      Где 10.10.1.110 – текущий IP адрес данного компьютера

      netstat ano findstr

      Теперь с помощью утилиты netstat проверьте, что в Windows теперь слушается локальный порт 3340:
      netstat -ano | findstr :3340

      Примечание. Если эта команда ничего не возвращает и перенаправление портов через netsh interface portproxy не работает, убедитесь что у вас в системе включена служба iphlpsvc (IP Helper / Вспомогательная служба IP).

      служба iphlpsvc (IP Helper / Вспомогательная служба IP)

      А на сетевом интерфейсе, для которого создается правило перенаправления портов должна быть включена поддержка IPv6.

      IPv6 включен на сетевом интерфейсе

      Это обязательные условия для корректной работы порт-форвардинга. Без службы IP Helper и без включенной поддержки IPv6 механизм перенаправления не работает.

      В Windows Server 2003 / XP для работы перенаправления дополнительно нужно включить параметр реестра IPEnableRouter = 1 в ветке HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters.

      tasklist findstr pid

      Вы можете определить процесс, который слушает указанный локальный порт с помощью его PID (в нашем примере PID – 636):
      tasklist | findstr 636

      Теперь попробуем подключиться на данный порт с удаленного компьютера при помощи любого RDP клиента. В качестве rdp-порта нужно указать 3340 (номер порта указывается после двоеточия после адреса rdp-сервера), например, 10.10.1.110:3340

      RDP подключение на другой порт

      RDP подключение должно успешно установиться.

      netsh interface portproxy add v4tov4 listenport=3389 listenaddress=0.0.0.0 connectport=3389 connectaddress=192.168.1.100

      Это правило перенаправит весь входящий RDP трафик (с локального порта TCP 3389) с этого компьютера на удаленный компьютер с IP-адресом 192.168.1.100.

      Так же для проброса локального порта на удаленный сервер в Windows можно использовать технику SSH туннелей.

      Управление правилами проброса портов в Windows

      Важно.Проверьте, что в настройках вашего файервола (брандмауэра Windows или стороннего межсетевого экрана, такие часто включаются в состав антивирусного ПО) разрешены входящие подключения на новый порт. Вы можете добавить новое разрешающее правило в брандмауэр защитника Windows командой:

      netsh advfirewall firewall add rule name=”RDP_3340” protocol=TCP dir=in localip=10.10.1.110 localport=3340 action=allow
      Или с помощью командлета PowerShell New-NetFirewallRule:
      New-NetFirewallRule -DisplayName "RDP_3340" -Direction Inbound -Protocol TCP –LocalPort 3340 -Action Allow

      При создании входящего правила файервола через графический интерфейс для порта 3340 не нужно ассоциировать никакую программу, т.к. данный порт слушается исключительно сетевым драйвером.

      Можно создать любое количество правил перенаправления локальных портов Windows. Все правила netsh interface portproxy являются постоянными и сохраняются в системе после перезагрузки Windows.

      Несколько раз сталкивался со случаями, когда в Windows Server 2012 R2 правила перенаправления портов сбрасывались после перезагрузки сервера. В этом случае рекомендуется проверить нет ли периодических отключений на сетевом интерфейсе, и не меняется ли IP адрес при загрузке ОС (лучше использоваться статический IP, вместо динамического DHCP). В качестве обходного решения пришлось добавить в планировщик Windows скрипт с правилами netsh interface portproxy , который создает правило перенаправления порта при загрузке операционной системы.

      Чтобы вывести на экран список всех активных правил перенаправления TCP портов в Windows, выполните команду:

      netsh interface portproxy show all
      В нашем случае присутствует только одно правило форвардинга с локального порта 3340 на 3389:

      Совет. Также настройки перенаправления портов в режиме portproxy можно вывести так:
      netsh interface portproxy dump

      Конфигурация перенаправления портов Windows

      Дамп всех правил portproxy


      Чтобы удалить определенное правило перенаправления порта, выполните:
      netsh interface portproxy delete v4tov4 listenport=3340 listenaddress=10.10.1.110

      Удалить правило перенаправления портов

      Чтобы удалить все имеющиеся правила перенаправления и полностью очистить таблицу с правилами порт-форвардинга:
      netsh interface portproxy reset

      Для настройки перенаправления UDP трафика можно использовать Windows Server с ролью RRAS и NAT. Вы можете настроить перенаправление портов между интерфейсами компьютера с помощью графической оснастки (rrasmgmt.msc) или командой:

      netsh routing ip nat add portmapping Ethernet udp 0.0.0.0 53 192.168.1.54 53

      Еще одной неявной возможностью portproxy является возможность создать видимость локальной работы любого удаленного сетевого сервиса.

      Например, создадим такое перенаправление с локального порта 8888 на удаленный адрес 213.180.204.3:

      Перенаправление портов также можно использовать, чтобы пробросить порт с внешнего IP адреса сетевой карты на порт виртуальной машины, запущенной на этом же компьютере. В Hyper-V такой проброс порта можно настроить на виртуальном коммутатор (см. ниже).

      Windows не умеет пробрасывать диапазон TCP портов. Если вам нужно пробросить несколько портов, придется вручную создавать несколько правил перенаправления. Проще всего сформировать список команд netsh interface portproxy add с разными портами в блокноте и затем вставить в командную строку для выполнения.

      Настройка перенаправления портов в Hyper-V Server

      Сначала нужно создать виртуальный коммутатор с NAT:

      New-VMSwitch -Name "NAT" -SwitchType NAT -NATSubnetAddress 192.168.0.0/24

      Затем нужно подключить нужную ВМ в указанный коммутатор и включить правило трансляции адресов для всех виртуальных машин, подключенных через данный виртуальный коммутатор Hyper-V:

      New-NetNat -Name Web_NAT -InternalIPInterfaceAddressPrefix 192.168.0.0/24
      Add-NetNatStaticMapping -ExternalIPAddress "0.0.0.0/24" -ExternalPort 443 -Protocol TCP -InternalIPAddress "192.168.0.2" -InternalPort 443 -NatName Web_NAT

      Настраиваем проброс портов в Windows при помощи командной строки и Portproxy

      Часто можно услышать совершенно неверное утверждение, что в части сетевых настроек операционные системы Windows значительно уступают своим конкурентам (Linux и BSD). Отчасти такие суждения опираются на опыт администрирования стандартных ролей полностью игнорируя возможности командной строки.

      Начиная с Windows Server 2003 в состав системы был в введена команда Netsh, которая позволяет гибко управлять сетевыми настройками компьютера. Обзор всех возможностей этой утилиты займет не одну статью, поэтому мы остановимся на командах Netsh для интерфейса Portproxy, позволяющих непосредственно решить нашу задачу.

      Данный набор команд позволяет перенаправлять приходящие пакеты с IPv4 и IPv6 портов на любые IPv4 и IPv6 порты компьютера назначения в любых комбинациях. Единственное ограничение - portproxy может работать только с протоколом TCP, но в большинстве случаев этого достаточно.

      Для добавления перенаправления используется команда add v4tov4 (если требуется перенаправление с IPv4 в IPv6 используйте v4tov6 и т.д.), полный синтаксис будет такой:

      • listenaddress - локальный адрес на котором принимаются соединения
      • listenport - локальный порт на котором принимаются соединения
      • connectaddress - удаленный или локальный адрес на который перенаправляются соединения
      • connectport - удаленный или локальный порт на который перенаправляются соединения

      Для изменения уже существующего правила используется команда set v4tov4, которая имеет идентичный синтаксис, listenaddress и listenport - являются обязательными параметрами. Из необязательных параметров можно указывать только тот, который нужно изменить.

      Для удаления правил используйте delete v4tov6 с указанием входящих адреса и порта:

      Для просмотра существующих правил введите:

      Вместо all допустимо указывать v4tov4 или v6tov4 и т.п. для просмотра только соответствующих правил.

      winsrv-portproxy-001.jpg

      Для сброса всех существующих правил используйте:

      Чтобы не быть голословными рассмотрим практический случай использования portproxy в одной довольно непростой ситуации.

      У одного нашего клиента имеется две аффилированных (т.е. принадлежащих одному владельцу) организации, имеющие разный вид деятельности и между собой не взаимодействующие. Одна из них находится в городе и не испытывает проблем с внешними коммуникациями. Вторая в сельской местности где доступен только среднего качества интернет, а о выделенном IP-адресе не может быть и речи.

      Поэтому, когда встал вопрос организации удаленного доступа к сети второй организации с административными и контрольными целями, то было принято решение использовать для этого ресурсы первой организации, при этом внутренние сети обоих компаний не должны видеть друг друга и вообще иметь какой-либо доступ к ресурсам другой организации.

      Кроме того, выяснилось, что обе сети имеют одинаковый диапазон IP-адресов, что делало маршрутизацию между ними в принципе крайне затруднительной. По условиям задачи требовалось обеспечить доступ к RDP (порт 3389) сервера SRV-2-1 и SSH (порт 22) сервера SRV-2-2 второй организации, для этого выделялся сервер SRV-1-1 первой компании, при этом, как можно увидеть из схемы ниже, сервера обоих компаний также имеют одинаковые внутренние адреса.

      winsrv-portproxy-002.jpg

      Между серверами был поднят VPN-туннель, и они видят друг друга по адресам VPN-сети (10.8.0.0), а дальше на выручку приходит portproxy. Так как порты 3389 и 22 соответствующие нужным службам уже использовались для целей администрирования первой компании, то мы выбрали для служб второй компании внешние порты 3390 и 22222, которые были проброшены с внешнего интерфейса роутера первой компании на сервер SRV-1-1 штатным образом.

      Первое правило отправит все пакеты пришедшие на порт 3390 с адресом 192.168.0.200 (внутренний адрес SRV-1-1) в VPN-туннель серверу SRV-2-1, а так как он уже является целевым для службы RDP, то сразу меняем порт назначения на 3389. Первая часть задачи выполнена.

      Второе правило отправит к SRV-2-1 все пакеты с порта 22222 (SSH), теперь нам надо научить этот сервер как правильно доставить их адресату. Для этого добавим уже этому серверу следующее правило:

      Согласно которому сервер SRV-2-1 в сети второй компании будет слушать порт 22222 на интерфейсе VPN-сети и передавать все полученные пакеты на порт 22 (SSH) сервера SRV-2-2.

      Как видим мы весьма просто реализовали довольно сложную схему, так пакет к серверу SRV-2-2 проходит три промежуточных узла, но при этом мы не настраивали никакой маршрутизации и не устанавливали никакого дополнительного ПО и вообще обошлись минимальным вмешательством в инфраструктуру.

      Читайте также: