- How to set a proxy for terminal?
- 6 Answers 6
- Использование HTTP proxy и SOCKS в Linux
- curl: передача данных через proxy
- wget: закачка файлов через proxy
- ssh: доступ к серверам
- Соксификатор dante
- DNS запросы через proxy
- Как настроить прокси в Linux
- Рассмотрим настройку переменных для использования прокси
- Тестирование работы
- Отключение
- Упрощенное использование прокси
How to set a proxy for terminal?
I am looking to set a proxy for terminal. What I need is I want to send all terminal communications to the internet through a proxy, say tor. I tried to set a system wide proxy set up. But Terminal doesn’t obey the system wide proxy configuration. Is there any other way to do this?
You mean ssh or telnet or . ? Please explain us «terminal communications». You can telnet to some host via proxy or ftp them, but communication from minicom you can not send via net . except like log file .
Is it possible to set a proxy for all network related activities done over the terminal? Instead of setting proxy for wget,curl and others separately. I am looking for such a solution.
Yes, but wget usually work on port 80 or 443, ssh on port 22, telnet on 23, ftp on 20 and 21 . You can use simpleproxy or tinyproxy
How to set this proxy for terminal? Do I explicitly set it for different apps running on terminal or can I set it in terminal such a way that all the commands I run in terminal go through this proxy?
ubuntu terminal needs http proxy, when you use SOCKS5 proxy, like shadowsocks, you can use proxychains to bridge SOCKS5 to http proxy. Check this github.com/shadowsocks/shadowsocks/wiki/…
6 Answers 6
export the below variables in terminal
export http_proxy='http://proxyServerSddress:proxyPort' export https_proxy='https://proxyServerSddress:proxyPort'
and use the following commands to disable proxy
unset http_proxy unset https_proxy
Terminal is not net application. Maybe is better to say, in your case, terminal is container for net application like ssh , telnet , lftp , wget , lynx .
sudo -H gedit /etc/profile.d/proxy.sh
Enter the details in this format.
export http_proxy=http://username:password@proxyhost:port/ export ftp_proxy=http://username:password@proxyhost:port/ export telnet_proxy=http://username:password@proxyhost:port/
This is for when using wget , ftp , lftp , telnet in terminal
ssh has no native SOCKS client support, you need to use a ProxyCommand for that, for instance with socat :
ssh -o ProxyCommand='socat - SOCKS4A:myproxy:%h:%p,socksuser=nobody' user@host
Or use things like tsocks to transparently use SOCKS for TCP traffic.
ssh -o ProxyCommand='socat - "SOCKS5:%h:%p|tcp:myproxy:1080"' user@host
For HTTP Proxy CONNECT method with socat 2:
ssh -o ProxyCommand='socat - "PROXY:%h:%p|tcp:myproxy:80"' user@host
Использование HTTP proxy и SOCKS в Linux
В Linux существует много полезных консольных команд, которые при необходимости хотелось бы запустить через proxy. Некоторые приложения имеют встроенную поддержку proxy, а некоторые нет. Далее описано как пользоваться востребованными утилитами через proxy, даже теми, которые этой поддержки не имеют.
curl: передача данных через proxy
curl имеет полноценную поддержку как HTTP proxy так и SOCKS.
Для тестирования возможно использовать proxy сервера из бесплатных списков (socks — sockslist.net, и HTTP proxy — proxyhttp.net). Проверка IP адреса будет производиться с помощью ресурса check-host.net
# Проверить HTTP proxy curl --proxy 11.22.33.44:5555 check-host.net/ip # Тоже самое, но если для HTTP proxy требуется авторизация curl --proxy 11.22.33.44:5555 -U username:password check-host.net/ip # Проверить socks4 curl --socks4 11.22.33.44:5555 check-host.net/ip # Проверить socks5 curl --socks5 11.22.33.44:5555 check-host.net/ip # Тоже самое, только преобразование имен идет также через SOCKS # (подробнее о преобразовании имен можно прочитать ниже в подразделе "DNS запросы через proxy") curl --socks5-hostname 11.22.33.44:5555 check-host.net/ip
Часть параметров curl можно записать в файл ~/.curlrc:
socks5 = 11.22.33.44:5555 proxy-user = username:password user-agent = "Mozilla/5.0 (X11; Linux i686; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"
С помощью time и curl также можно замерить время отклика сервера:
# Без proxy: time curl check-host.net/ip # С proxy: time curl --socks5 11.22.33.44:5555 check-host.net/ip # Или любого сайта: time curl habrahabr.ru
Результат будет выглядеть так:
real 0m0.307s user 0m0.000s sys 0m0.004s
wget: закачка файлов через proxy
wget имеет встроенную поддержку proxy. Недостаток лишь в том, что только поддержку HTTP proxy. Для использования совместно с SOCKS рекомендуется использовать соксификатор dante.
# Скачать файл через proxy: http_proxy="http://33.22.44.44:8080" wget http://www.google.com/favicon.ico Тоже самое, но для HTTPS https_proxy="http://33.22.44.44:8080" wget https://www.google.com/favicon.ico # Использовать proxy с авторизацией http_proxy="http://33.22.44.44:8080" wget --proxy-user=user --proxy-password=password http://www.google.com/favicon.ico
Чтобы все время не указывать —proxy-user и —proxy-password можно их прописать в файл ~/.wgetrc:
proxy-user = username proxy-password = password user-agent = Mozilla/5.0 (X11; Linux i686; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
ssh: доступ к серверам
Для доступа к серверам через ssh и proxy также лучше использовать соксификатор dante.
Соксификатор dante
apt-get install dante-client # пример для Debian-based систем
# Если требуется зайти по ssh на сервер SOCKS_PASSWORD="" SOCKS_SERVER="11.22.33.44:1080" socksify ssh myserver # Тоже самое, только если для подключения к соксу требуется авторизация SOCKS_USERNAME="user" SOCKS_PASSWORD="password" SOCKS_SERVER="11.22.33.44:1080" socksify ssh myserver # Пример с использованием IRC клиента - irssi SOCKS_PASSWORD="" SOCKS_SERVER="11.22.33.44:1080" socksify irssi # Тоже самое, только с использованием HTTP proxy с поддержкой метода CONNECT HTTP_CONNECT_PROXY="http://11.22.33.44:8080" socksify irssi
С помощью socksify можно направить через proxy почти любое приложение, не только консольное.
Чтобы все время не вводить данные о proxy можно создать файл /etc/socks.conf
Пример для SOCKS:
Пример для HTTP proxy с авторизацией:
А также экспортировать переменные SOCKS_USERNAME и SOCKS_PASSWORD, если для SOCKS или HTTP proxy требуется авторизация:
export SOCKS_USERNAME="username" export SOCKS_PASSWORD="password"
DNS запросы через proxy
Часто требуется чтобы и преобразование имен происходило через proxy. Если использовать dante, то запрос на преобразование имен идет и через proxy, и через именной сервер указанный в /etc/resolv.conf . Понять почему же идет два одинаковых запроса вместо одного не удалось. Поэтому можно предложить два варианта:
1) Закомментировать именные сервера в файле /etc/resolv.conf, чтобы преобразование имен шло только через proxy. Это отразится на всей системе.
2) Изменить /etc/resolv.conf и выставить именные сервера необходимой страны, или просто отличные от серверов провайдера. Например установить сервера Google:
nameserver 8.8.8.8 nameserver 8.8.4.4
Чтобы данные не были перезаписаны именными серверами провайдера (при переподключении), можно запретить обновление списка именных серверов сетевому менеджеру (NetworkManager/wicd) или DHCP-клиенту (спасибо ergil за корректировку).
Или воспользоваться «грубым» методом — запрещением изменения файла /etc/resolv.conf:
sudo chattr +i /etc/resolv.conf
Если есть какие-то дополнения, пожалуйста, напишите, это будет полезно узнать и применить.
Как настроить прокси в Linux
Прокси-сервер или proxy — в переводе с англ. «представитель» — сервер как комплекс программ в компьютерных сетях, позволяющий клиентам выполнять косвенные запросы к другим сетевым службам. В рамках данного материала прокси понимается сервер выполняющий доступ к глобальной сети интернет.
Проще всего для использования прокси в командной строке, но в зависимости от типа трафика, Вы можете определить переменные окружения http_proxy, https_proxy или ftp_proxy.
Практически все утилиты командой строки, такие как curl, wget, ssh, apt-get, ftp, wget, yum и прочие, используют данные переменные.
Рассмотрим настройку переменных для использования прокси
Используйте следующий синтаксис для настройки таких типов трафика как http, https и ftp из командной строки:
$ export ftp_proxy=»http://proxy-server:port»
$ export http_proxy=»http://proxy-server:port»
$ export https_proxy=»https://proxy-server:port»
Используйте следующий синтаксис, если прокси-сервер требует аутентификацию:
$ export http_proxy=»http://user:pass@proxy-server:port»
$ export https_proxy=»https://user:pass@proxy-server:port»
$ export ftp_proxy=»http://user:pass@proxy-server:port»
Если Ваш пароль содержит спец. символы, Вы должны заменить их на ASCII коды.
Например символ собаки «@», должен быть заменен на «%40» (т. е. p@ss = p%40ss).
Тестирование работы
Используйте следующую команду для проверки текущих переменных прокси:
Можно проверить работу прокси, узнав ваш внешний IP адрес из командной строки:
$ wget -q -O — checkip.dyndns.org \
| sed -e ‘s/.*Current IP Address: //’ -e ‘s/
или просто запустить ping:
Так же, с помощью команды time, Вы можете проверить скорость соединения при использовании прокси-сервера и без него:
$ time wget -q -O — checkip.dyndns.org \
| sed -e ‘s/.*Current IP Address: //’ -e ‘s/
Довольно просто можете измерить скорость загрузки из интернета с помощью следующей команды :
$ wget —output-document=\
/dev/null http://speedtest.wdc01.softlayer.com/downloads/test500.zip
Отключение
Используйте следующие команды для отключения прокси:
$ unset http_proxy
$ unset https_proxy
$ unset ftp_proxy
Упрощенное использование прокси
Если у Вас один и тот же прокси-сервер для http, https и ftp трафика, Вы можете использовать следующие команды для включения и отключения прокси:
Если Вам приходится очень часто пользоваться прокси, Вы можете создать следующие bash функции (добавьте в Ваш ~/.bashrc) :
# Включить прокси function setproxy() export http,https,ftp>_proxy="http://proxy-server:port" > # Выключить прокси
function unsetproxy() unset http,https,ftp>_proxy >
Примените настройки, перезагрузив ~/.bashrc.
Теперь, для включения и отключения прокси можно использовать команды setproxy и unsetproxy.