Настройка VPN только для какого-то специального программного обеспечения, а не для всех частей системы?

Как использовать VPN только для какой-то части системы? Это означает, что, например, Firefox и aria2c будут использовать vpn, а pidgin - нет! Возможно ли это?

В моем случае я хочу использовать VPN для всей системы, за исключением передачи, apt-get и pidgin или наоборот: просто используя vpn для этих программ: firefox, aria2c, youtube-dl [ 111]

3
задан 2 August 2013 в 20:15

4 ответа

@see вопрос суперпользователя о разных интерфейсах для разных процессов

Этот ответ требует некоторой компиляции (подробнее см. Выше), доступа root и команды ip из пакета iproute [ 1112]

sudo apt-get install iproute

Это позволит извлечь и скомпилировать bind.so PRELOAD библиотеку в вашем текущем каталоге.

wget http://www.ryde.net/code/bind.c.txt -O bind.c
gcc -nostartfiles -fpic -shared bind.c -o bind.so -ldl -D_GNU_SOURCE

Теперь давайте предположим, что ваш VPN подключен и вы знаете имя вашего туннельного устройства (например, tun0). Предположим также, что вы знаете свой gw по умолчанию (route |awk '/default/ {print $2 }') и свой шлюз туннеля / другого устройства route |awk '/tun0/ {print $2 }'

## run as root:
## which device to route out with (tun0, eth0, wlan0) 
export DEV=tun0
## default gw to use for that device (see above for advice)
export DEVGW=192.168.1.1
# which routing table to use
export TABLE=special_table1
# get ip for "$DEV"
export BINDIP=$(ifconfig $DEV | perl -ne 'if (/inet addr:([\d\.]+)/) {print $1}')

## create empty routing tables
# match name to TABLE variable above with unique number before it.
# like: (creates two tables)
echo 201 special_table1 >> /etc/iproute2/rt_tables
echo 202 special_table2 >> /etc/iproute2/rt_tables

## add default gw for special routing table
ip route add default via $DEVGW dev $DEV table $TABLE
## source route all traffice from you bound ip through that
ip rule add from $BINDIP table $TABLE

# flush routing cache
ip route flush cache

Чтобы посмотреть таблицы маршрутизации:

# This is the main table (should basically have same info as `route -n`)
ip route show table main
# your special_table1
ip route show table special_table1

# this this you can see which source ips trigger which routing table
ip rule show

Выполняется такая программа, как firefox с bind.so PRELOADED и привязка ее к интерфейсу, с которым вы хотите маршрутизировать трафик.

### run as user 
## change DEV to with route/device you want your program to bind to 
export DEV=tun0
export BINDIP=$(ifconfig $DEV | perl -ne 'if (/inet addr:([\d\.]+)/) {print $1}')
BIND_ADDR="$BINDIP" LD_PRELOAD=./bind.so "PROGRAM NAME"

#like:
BIND_ADDR="$BINDIP" LD_PRELOAD=./bind.so firefox

Если вы хотите, вы можете повторить это для любого количества интерфейсов, которые вы хотите, и вы связываете. Так, чтобы конкретное приложение было привязано к определенному интерфейсу. Все приложения, которые не были запущены с bind.so, вышли из маршрута, как указано в основной таблице маршрутизации.

0
ответ дан 2 August 2013 в 20:15

Если вы можете определить конкретные IP-адреса и / или порты, которые вы хотите использовать с VPN или наоборот, то команда ip поможет вам сделать это, разрешив / запретив маршрут для таких и таких.

Команда ip находится в пакете iproute:

sudo apt-get install iproute
man ip

Я использую ее очень ограниченным образом, поэтому я не хочу давать вам подробную информацию, но я уверен, что Вы можете выяснить это с документацией. В Интернете вы также можете найти хороший пример того, как делать такие вещи с помощью команды ip.

0
ответ дан 2 August 2013 в 20:15

Можно настроить прослушивающий сокет (то есть программу, которая предлагает услугу) для использования определенного адаптера. Но клиентские программы, такие как Firefox, обычно просто отправляют IP-пакеты в ОС (путем привязки к 0.0.0.0) и оставляют на усмотрение ОС информацию о том, как эти пакеты достигают Интернета.

Некоторые клиентские программы позволяют настраивать привязку к определенному IP-адресу адаптера, но как это сделать, зависит от конфигурации каждого приложения.

Можно настроить IPTABLES2 для использования PID (ID процесса) для маршрутизации IP к данному адаптеру, но этот PID будет постоянно изменяться, поэтому потребуется постоянно обновлять правила брандмауэра.

Лучшим решением является установка простого SOCKS прокси , такого как Squid (что довольно сложно), tinyproxy, Dante или SS5.

Свяжите прокси-сервер, чтобы предложить SOCKS5 на адаптере lo, и настройте его для отправки всех IP-адресов через адаптер VPN.

Если вы связываете прокси-сервер с портом Ethernet, другие машины в той же сети могут использовать один и тот же сервер SOCKS.

Настройте каждое приложение, которому необходимо использовать VPN для использования прокси-сервера.

Существуют такие инструменты, как soxify и tsocks , которые можно использовать, чтобы заставить программы, которые изначально не поддерживают SOCKS, использовать его.

0
ответ дан 2 August 2013 в 20:15

Если вы хотите использовать vpn для маршрутизации вашего трафика через него, и вы хотите, например, использовать его с Firefox, например, это то, что вы делаете: вы входите в Firefox, перейдите в меню «Параметры»: enter image description here

Перейдите на вкладку «Дополнительно» -> «Вкладка сети»

enter image description here

Теперь в диалоговом окне «Параметры подключения»:

Выберите «Ручная настройка»
В SOCKS Host введите свой IP-адрес обратной связи (всегда 127.0.0.1)
Используйте порт, который вы выбрали выше (80 или 8080 или любой другой, если вы не хотите использовать 80)
Убедитесь, что выбран SOCKS v5
Если вы не хотите использовать прокси-сервер для некоторых адресов (возможно, localhost или чего-то еще), введите эти
адреса \ домены в поле «Нет прокси для:» текстовое поле
Нажмите OK.

enter image description here

И ты должен идти. Вы можете проверить свой ip, чтобы увидеть, работает ли он корректно. http://www.whatismyip.org
Процедура должна быть одинаковой для остальных приложений. Обратите внимание, что не у всех есть эти опции.

0
ответ дан 2 August 2013 в 20:15

Другие вопросы по тегам:

Похожие вопросы: