Как использовать SOCKS прокси с ням?

13

Страница man для yum.conf описывает несколько переменных, связанных с прокси:

          proxy URL to the proxy server that yum should use.
          proxy_username username to use for proxy
          proxy_password password for this proxy

Но как указать SOCKS прокси?

Я предполагаю, что выше только для обычных HTTP прокси ...

maxschlepzig
источник

Ответы:

3

tsocksПриложение может соксифицировать каждые другие приложения

tsocks app args
enzotib
источник
Удивительно, но он уже доступен в репозиториях Fedora по умолчанию - через Google я только что нашел «socksify» (клиент socks dante), который недоступен - и не работает в Fedora 17 при компиляции из исходного кода.
maxschlepzig
Как именно это использовать?
Чани
tsocks устарел, последнее обновление вернулось в 2002. В настоящее время он не может socksify yum / curl. Используйте danteвместо этого. Его команда socksify app argsпохожа на tsocks. (и так же, как tsocks.conf для команды tsocks, вам также нужен socks.conf для команды socksify). Однако для соксификации yumя рекомендую ответ @Klaus. Измените /etc/yum.conf лучше.
Брюс
17

Добавьте эту строку в /etc/yum.conf(получил идею из поста DaPillow)

proxy=socks5://ip:port

В случае, если разрешение имени хоста через прокси необходимо, благодаря Дэнни из комментариев это будет сделано:

proxy=socks5h://ip:port

У меня это работало с использованием yum 3.4.3 на Fedora 21.

Клаус
источник
Он не работает на RHEL 2.6.32 (64Bit) с yum 3.2.29: - | ProxyChains вполне стандартна для такой цели!
Джатин Кумар
proxychains кажется достаточно справедливым. Я использовал это, и я рад этому;) Но в вашем случае, я думаю, что проблема с yum-версией: 3.2.29 (у меня 3.4.3)
Клаус
Да, согласен, это просто версия yum, а 3.2.29 по умолчанию для 6.5 Final Release.
Джатин Кумар
Работает на RHEL7 / CentOS7 (ням 3.4.3).
Сэм Хартсфилд
Это должен быть принятый ответ!
Дэнни Гуссен
7

Как указывает enzitib, tsocksможет использоваться для использования прокси-сервера SOCKS yum.

Чтобы быть более подробным, можно использовать это так:

$ export TSOCKS_CONF_FILE=$HOME/.tsocks.conf
$ cat .tsocks.conf
server = 127.0.0.1
server_port = 1080
$ tsocks yum ...

По умолчанию tsocks использует SOCKS версии 4, но вы можете настроить 5 с помощью директивы server_type. Для параметров пользователя / пароля существуют директивы default_user / default_pass и переменные среды TSOCKS_USERNAME / TSOCKS_PASSWORD.

maxschlepzig
источник
5

Я использую CentOS6.x с yum-3.2.29-81, curl / libcurl 7.19.7-53 и имею такую ​​же проблему. У меня есть серверы yum за брандмауэром, и я хочу использовать yum поверх настройки прокси-сервера SOCKS5, используя ssh. В идеале я хочу сделать это, не требуя tsocks, proxychains или каких-либо других утилит socksification.

Я устанавливаю соединение SOCKS5, используя:

ssh -D 40000 dmz-server

Я покопался в источниках Python yum и увидел, что они используют pycurl, который оборачивает libcurl (также обратите внимание, что все переменные окружения прокси-сервера - http_proxy, HTTP_PROXY, all_proxy, ALL_PROXY и т. Д. Изначально не были определены). Кроме того, я проверил, что ~ / .curlrc был пуст, поэтому он не испортил мои результаты теста.

Я хотел посмотреть, смогу ли я заставить curl говорить через прокси socks5:

curl --socks5 127.0.0.1:40000 http://some-server/some-url

успешно вернул удаленную веб-страницу, так что это хороший признак - показ libcurl может использовать прокси SOCKS5. Тем не менее, определение переменной среды

http_proxy=socks5://127.0.0.1:40000 

не хватило

http_proxy=socks5://127.0.0.1:40000 curl http://some-server/some-url

не удалось.

На этом этапе я переключился на использование тестовой программы Python test.py :

import pycurl
import sys
sys.stderr.write("Testing %s\n" % pycurl.version)
c = pycurl.Curl()
c.setopt(c.URL, 'http://some-server/some-url')
c.setopt(c.WRITEFUNCTION, sys.stdout.write)
c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5)
c.perform()
c.close()

Сейчас работает

./test.py

не сможет получить, но работает

http_proxy=socks5://127.0.0.1:40000 ./test.py

успешно извлечет http: // some-server / some-url . Поэтому мне кажется, что эта (по общему признанию) древняя комбинация yum / libcurl, которая поставляется с CentOS6, неправильно устанавливает тип прокси в libcurl. Я думаю, что происходит то, что PROXYTYPE по умолчанию использует стандартный HTTP-прокси вместо идентификации схемы socks5: // в URL-адресе, указанном в переменной среды http_proxy .

В любом случае следующий патч для /usr/lib/python2.6/site-packages/urlgrabber/grabber.py работал, чтобы позволить мне получить доступ к репозиториям http: // yum через прокси SOCKS5. В PyCurlFileObject # _set_opts (self, opts = {}) добавьте:

if self.scheme == 'http':
  proxy = os.getenv('http_proxy') or os.getenv('HTTP_PROXY') or os.getenv('all_proxy') or os.getenv('ALL_PROXY')
  if proxy and proxy.find("socks5://") != -1:
    self.curl_obj.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5)

вокруг линии 1205, прямо перед

# ssl options
if self.scheme == 'https':

С этим изменением

http_proxy=socks5://127.0.0.1:40000 yum install <package_name>

успешно подключается ко всем моим http: // yum репозиториям на другой стороне брандмауэра через ssh-прокси SOCKS5.

Конечно, можно экспортировать переменную среды http_proxy в своей оболочке, чтобы избежать ее указания перед каждым вызовом yum .

Лимонный кот
источник
1

Proxychaines также является хорошим вариантом для вас!

сначала загрузите его и установите информацию о ваших носках в proxychains.confфайл и введите proxyxhanesперед любой командой, которую вы хотите использовать прокси socks!

Милад Собххиз
источник
1

Добавьте эту строку /etc/yum.confи убедитесь, что вы используете ожидаемый протокол (не http):

...    
proxy=socks5h://localhost:1080
...
Рамеш
источник
5
Это не работает:Options Error: Error parsing "proxy = "socks5h://abc.mnl.xyz.com:9999/ # "": URL must be http, ftp or https not "socks5h"
Чани