Перенаправление порта NETSH с локального порта на локальный порт не работает
Я пытаюсь использовать команду NETSH PORTPROXY для пересылки пакетов, отправленных на мой компьютер XP (IP 192.168.0.10
) от порта 8001 до порта 80 (сервер XAMPP Apache прослушивает порт 80).
Я выдал следующее:
netsh interface portproxy add v4tov4 listenport=8001 listenaddress=192.168.0.10 connectport=80 connectaddress=192.168.0.10
Показать все подтверждает, что все настроено правильно:
netsh interface portproxy show all
Listen on IPv4: Connect to IPv4:
Address Port Address Port
--------------- ---------- --------------- ----------
192.168.0.10 8001 192.168.0.10 80
Однако я не могу получить доступ к веб-сайту Apache из http://localhost:8001
, Я могу получить доступ через прямой порт в http://localhost
как показано ниже.
Кроме того, я также попробовал следующее:
1. Зайдите на сайт Apache с удаленного ПК по ссылке: http://192.168.0.10:8001
, Брандмауэр выключен. 2. Изменение адреса для прослушивания и подключения к 127.0.0.1
,
Без дополнительной информации я не могу найти способ решить проблему. Есть ли способ отладки NETSH PORTPROXY?
Примечание. Кстати, если вам интересно, почему я это делаю, я на самом деле хочу сопоставить удаленные клиентские соединения MySQL с пользовательского порта на порт MySQL Server по умолчанию 3306.
5 ответов
Мне удалось заставить это работать, выпуская:
netsh int ipv6 install
Кроме того, для моей цели не требуется устанавливать адрес прослушивания, а лучше установить connectaddress=127.0.0.1, например
netsh interface portproxy add v4tov4 listenport=8001 connectport=80 connectaddress=127.0.0.1
Если netsh
проксирование порта не работает должным образом, тогда вам следует проверить следующее, желательно в таком порядке:
- Убедитесь, что прокси-сервер порта правильно настроен
- Запустите или перезапустите соответствующую службу Windows
- Убедитесь, что установлена поддержка IPv6.
- Убедитесь, что порт не заблокирован брандмауэром
Убедитесь, что прокси-сервер порта правильно настроен
Это может показаться тривиальным, но на всякий случай найдите время, чтобы просмотреть свою конфигурацию, прежде чем идти дальше.
В командной строке или в командной строке PowerShell выполните следующую команду:
netsh interface portproxy show all
Результат должен выглядеть примерно так:
Listen on ipv4: Connect to ipv4:
Address Port Address Port
--------------- ---------- --------------- ----------
24.12.12.24 3306 192.168.0.100 3306
24.12.12.24 8080 192.168.0.100 80
Внимательно просмотрите эти настройки. Убедитесь, что вы действительно можете подключиться к адресам в правой части этого списка с локального компьютера. Например, можете ли вы локально открыть веб-браузер и получить доступ192.168.0.100:80
? Если протокол не HTTP, используйте telnet:telnet 192.168.0.100 3306
(см. здесь, как установить клиент Telnet в Windows).
Тогда правильны ли значения слева? Действителен ли IP-адрес для вашей машины? Это номер порта, к которому вы пытаетесь подключиться с внешней машины?
Запустите или перезапустите соответствующую службу Windows
В последних версиях Windows netsh
проксирование портов обрабатывается службой Windows с именем "IP Helper" или "iphlpsvc". Очевидно, что проксирование не будет работать, если эта служба остановлена. Я также сталкивался с ситуациями, которые, как выяснилось, разрешалось перезапуском этой службы.
Для этого в последних версиях Windows:
- Откройте диспетчер задач, затем перейдите на вкладку " Службы ".
- В столбце "Имя" найдите службу с именем "iphlpsvc" или "IP Helper".
- Щелкните эту службу правой кнопкой мыши и выберите " Перезагрузить". Если перезапуск недоступен, значит, служба, вероятно, остановлена и действительно должна быть запущена, поэтому выберите Пуск.
В предыдущих версиях Windows найдите службы в разделе "Администрирование" на панели управления.
Убедитесь, что установлена поддержка IPv6.
Для включения требуется поддержка протокола IPv6.netsh
проксирование портов, в том числе для прокси IPv4-to-IPv4 (см. статью поддержки Microsoft здесь).
В командной строке или в командной строке PowerShell выполните следующую команду:
netsh interface ipv6 install
Убедитесь, что порт не заблокирован брандмауэром
Локальный брандмауэр потенциально может заблокировать порт даже до того, как они достигнут службы IP Helper. Чтобы проверить эту гипотезу, временно отключите любой локальный брандмауэр (включая собственный брандмауэр Windows), а затем повторите попытку. Если это сработает, просто добавьте исключение порта в конфигурацию брандмауэра.
У меня проблема с тобой. Я решил это только сейчас. Существует служба Windows с именем "IP Helper", которая обеспечивает туннельные соединения функций. Вы должны убедиться, что это было начато.
Сначала вы должны запустить Command.exe от имени администратора, щелкнув правой кнопкой мыши значок командной строки и выбрав " Запуск от имени администратора". Вас попросят подтвердить.
Вставьте свой
netsh
Введите команду в окне command.exe и нажмите Enter.Если сообщение об ошибке не отображается, команда сработала.
В вашем веб-браузере перейдите на
http://your-up:8001
чтобы увидеть, как это работает.
Журнал событий Windows может содержать информацию, помогающую найти причину сбоя.
Еще одна причина, не упомянутая здесь, заключается в том, что порт прослушивания может находиться в диапазоне исключенных портов . Я наткнулся на эту проблему и потратил некоторое время, чтобы выяснить причину.
The netsh interface portproxy add
работает нормально, т.netsh interface portproxy show all
перечисляет добавленное правило, но прокси-сервер на самом деле не работает, напримерnetstat -an | findstr <LPORT>
ничего не выводит.
Чтобы узнать список исключенных портов, запуститеnetsh int ip show excludedportrange protocol=tcp
. Если ваш порт прослушивания находится в диапазоне исключенных портов, вы можете попытаться отменить исключение диапазона или просто выбрать другой порт.