LinuxForum.Fans
Тема

Настройка Socks 5 + IPv6

Автор: kolllak 20 сообщений 4377 просмотров
02.11.2014 23:34 · отредактировано #399597

Уважаемые гуру, ломаю голову третий день. В кратце:
VPS на виртуализации KVM
1 IPv4
10 IPv6
Задача: поставить socks 5 сервер с конфигураций позволяющей подключаться 10 пользователям через IPv4, с выходом каждому на свой внешний IPv6//

Поставил debian 7, решил попробовать настроить Dante - по дефолту ставится версия ветки 1.3, к сожалению она не держит IPv6.
Попробовал установить версию 1.4.1 с офф сайта - столкнулся с проблемой, не могу найти пример корректного содержимого /etc/init.d/sockd, а после сборки пакета он не установился автоматом
ставил по хелпу c github.com
в интерфейсах eth0 -IPv4, eth0:1 IPv6
на дефолтном самом минимальном конфиге при попытке старта выдает:

text
: numeric argument required exit: 0

хотел в конфиге Dante прописать, но ввиду проблем с работой минимуму дальше пока не прошел:

text

internal.protocol: ipv4
internal: eth0 port = 1088
internal: 111.111.111.111 port = 1080
external.protocol: ipv6
external: eth0:1

подскажите как правильно его поставить? либо что лучше использовать в моей ситуации? хотя-бы какой socks server имеет необходимый функционал чтобы можно копать в направлении имея уверенность в наличии правильного решения..

#####################
почитав различные мануалы прихожу к выводу что мою задачу можно решить и настройкой iptables?
или необходимо комбинировать?
к примеру:
1 user: принимаем соединение по IPv4:1081 (socks5) --> через таблицы маршрутизации назначаем внешний IPv6-1
2 user: принимаем соединение по IPv4:1082 (socks5) --> через таблицы маршрутизации назначаем внешний IPv6-2
n user: принимаем соединение по IPv4:10nn (socks5) --> через таблицы маршрутизации назначаем внешний IPv6-n

Dante по конфигу может это делать самостоятельно, но чтот не могу пока победить установку
поправьте если ошибаюсь в необходимости дополнительной маршрутизации к socks

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

и в процессе в голове как гвоздь, неужели НИКТО не ставил последнюю версию Dante на что угодно уже..

03.11.2014 11:11 · отредактировано #399632

Попробуйте Dante.

03.11.2014 19:00 · отредактировано #399662

да сегодняшнее утро приветствовало меня удачной компиляцией последней версии с поддержкой IPv6 на образе CentOS-6-amd64
Пришлось собирать rpm из сорцов.
Сейчас дело за конфигом. На простейшем стартовал. На нужном порту висит.

Нашел пример конфига для предыдущей версии 1.4.0 который позволяет слушать все ип и осуществляет выход клиента во внешний мир с того ип на который был осущетсвлен коннект. (сабж)
Он в своем первоисходном виде не стартанул выдает ошибки. Но мне и нужно немного другое.
Мне нужен общий коннект на один IPv4 с которого в зависимости от логина или порта коннекта будет выбираться внешний IPv6
Есть у кого идеи?

03.11.2014 19:07 · отредактировано #399664

"kolllak" написал:
а сегодняшнее утро приветствовало меня удачной компиляцией последней версии с поддержкой IPv6 на образе CentOS-6-amd64
Почему не Debian? Вроде он тоже поддерживает IPv6?

"kolllak" написал:
Мне нужен общий коннект на один IPv4 с которого в зависимости от логина или порта коннекта будет выбираться внешний IPv6
Есть у кого идеи?
Распишите подребнее, что, куда, для чего. Схему работы с прокси желательно.
04.11.2014 11:53 · отредактировано #399712

не хватает возможности нарисовать)
1. я на дебиане не смог поставить последнюю версию, в репозиториях только 1.4.0, а она не держит команды ограничения чисто по проколу
internal.protocol: ipv4 ipv6
2. Под CentOS пока ковырялся - научился компилировать из сорцов, поэтому теперь наверное ось могу и сменить - не принципиально.

Нужно следующее:
коннект клиента на любой порт по IPv4 (он один на VPS)
доступ в сеть каждому клиенту по IPv6 (их сколько клиентов)

Нашел конфигурацию для Dante которая позволяет перенаправлять в сеть с того ип на который осуществлен коннект, однако мое клиентское программное обеспечение не держит IPv6, а доступ в сеть нужен именно с него, так хочу дать каждому отдельный IP. А наименее затратно это именно с IPv6

Сейчас сервер стартует и по статусу работает. Но почему то при проверке коннекта нет.
Думал мешает iptables, отключил, в том числе и ip6tables
не помогло
в логах пусто.
Конфиг Dante на текущий момент такой:

text
errorlog: /dev/null
logoutput: /var/log/socks5.log
internal: 111.111.111.111
external: eth0
socksmethod: username none
user.privileged: root
user.unprivileged: nobody
client pass {
  from: 0/0 to: 0/0
  log: error
}
socks pass {
  from: 0/0 to: 0/0
  log: error
}
04.11.2014 14:01 · отредактировано #399740

Вот что меня ждало под Debian

Показать
1. Настраиваем интерфейсы: (инстр.)
text
#nano /etc/network/interfaces

2. Ребутимся для 100% перезагрузки интерфейсов.

text
#reboot

3. Проверяем сетевые интерфейсы командой:

text
#ifconfig

4. Ставим для Dante

text
#upt-get update
#upt-get install gcc flex bison

5. Ставим для компиляции из исходников ([url=http://help.ubuntu.ru/wiki/programs_installation или http://habrahabr.ru/post/78094/]инстр.[/url])

text
#apt-get install build-essential autoconf automake libtool autotools-dev dpkg-dev fakeroot
#apt-get install dpkg debconf debhelper lintian

###################### Компилируем ################################

text
mkdir ~/dante/         # создаем папку для работы
cd ~/dante/
wget http://www.inet.no/dante/files/dante-1.4.1.tar.gz  #качаем последний дистриб

mkdir -p ~/dante/DEBIAN #потом сохраним сюда пакет tar -xvf dante-1.4.1.tar.gz cd ./dante-1.4.1/ ./configure

###############################################################

text
                     Configure status:

Client: Enabled Server: Enabled Preloading: Enabled Libwrap: Disabled, tcpd.h missing BSD Auth: Disabled, usable bsd_auth.h not found PAM: Disabled, security/pam_appl.h missing GSSAPI: Not found/disabled KRB5: Not found/disabled SASL: Not found/disabled UPNP: Not found/disabled Compatability: issetugid setproctitle strlcpy strvis

Modules:

redirect: Not found bandwidth: Not found ldap: Not found

################################################################

text
make
sudo apt-get install checkinstall
checkinstall

вводим описание пакета:

text
Dante

далее интер, смотрим вывод описания, все устраивает:

text
*****************************************
**** Debian package creation selected ***
*****************************************
This package will be built according to these values:
0 -  Maintainer: [ root@sevprice ]
1 -  Summary: [ dante ]
2 -  Name:    [ dante ]
3 -  Version: [ 1.4.1 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ checkinstall ]
7 -  Architecture: [ amd64 ]
8 -  Source location: [ dante-1.4.1 ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]
11 - Provides: [ dante ]
12 - Conflicts: [  ]
13 - Replaces: [  ]
###############################################################

интер, получаем:

text
**********************************************************************
 Done. The new package has been installed and saved to
 /root/dante/dante-1.4.1/dante_1.4.1-1_amd64.deb
 You can remove it from your system anytime using:
      dpkg -r dante
**********************************************************************

копируем полученный пакет в директорию/root/dante/DEBIAN/

text
cp /root/dante/dante-1.4.1/dante_1.4.1-1_amd64.deb ~/dante/DEBIAN/
cd ~/dante/DEBIAN/

показывает что пакет установлен:

text
ii  dante                              1.4.1-1                       amd64        dante

однако конфигов не вижу в упор, как и исполняемого файла /etc/init.d/sockd

04.11.2014 14:03 · отредактировано #399742

хм конфиг в директории /etc/ дефолтный не создался
но /usr/local/sbin/sockd появился
при обарщении привычно ругнулся на кривой конфиг) сейчас попробую создать самый простой руками

работать норм не хочет - видимо все же не встал(
пробовал создать руками как тут - но тоже не помогло
DeleGate ставится норм, но после запуска:
delegated -P11.111.11.235:1089 SERVER=socks
чет через него в сеть не попадаю, ип заменил в примере

мне писали пару раз юзать Sqiud но как я понял по дефолту он не пашет с IPv6, его тоже нужно перекомпилировать с правками..

04.11.2014 17:17 #399763

видимо тут больше вопросы о Windows в моде))))))))
Спасибо Нигелист, жаль что ты тут одинок

04.11.2014 18:49 #399787

kolllak, я не одинок, просто нужно больше подробностей, больше связной информации.

P.S. Просто сейчас осень и сопутствующая ей погода. Все грустят и всем лениво напрягать мозг. Мне тоже. :)

P.P.S. По Dante очень мало информации на русском, потому советую хоть и с переводчиком, но читать официальную документацию. И главное, сначала собрать нормальные пакеты с Dante (клиент и сервер). Для примера берите client, server.

04.11.2014 20:38 · отредактировано #399802

спасибо, попробую
возникает ощущение что проблема не в пакете...
возможно ли что отсутствие настроенного или внешнего сервера DNS блокирует дальнейшую передачу пакетов?
натолкнуло то что на одной машине дефолтный Данте работает нормально, но на ней еще поднят сервер+днс+пара сайтов
а на нулевой установился но не идет дальше сервера пакет

05.11.2014 11:20 #399836

На скок я понял вам надо так:
source ip (192.168.1.2) -----> debian (ip4) -----> (ip6) -------- world ?
Тоесть у вас точно будет на запросе определённый ип? Или он будет меняться?
На ip 6 привязка будет жёсткая к source ip? Или динамическая?

05.11.2014 11:23 #399837

Просто поидее вашу задачу можно решить другим инструментом, ток главное чтоб ваши запросы приходили на debian, а там уже iptables + table + mark.

06.11.2014 03:14 · отредактировано #399949

Да задача примерно такая,
единственное фактор от которого отталкиваться в выборе внешнего IPv6 для выхода трафика с сервера в world пока не определился.
Либо IP клиента, либо порт обращения. Однако ип клиента не удобен тем что ограничивает использование одним клиентом нескольких IPv6...
client ip (192.168.1.2) -----> debian (ip4) -port 1080 -----> (первый ip6) -------- world
-----> debian (ip4) -port 1081 -----> (второй ip6) -------- world

Тоже сейчас смотрю в сторону iptables, iproute2 и меток connmark
честно очень уж приходится погружаться - понимаю что нужно, да и пригодится, но мне нужно запустить уже вчера))))
живой бы пример как реализовать хоть одно необходимое правило.. а если б еще и гуи, это ж была бы сказка

курю сейчас ман: хабр
Использование маркировки пакетов при помощи iptables

text
Допустим нам нужно, чтобы пакеты на 80 порт уходили только через 11.22.33.1. Для этого делаем следующее:
# iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 80 -j MARK --set-mark 0x2
# ip route add default via 11.22.33.1 dev eth0 table 102
# ip rule add fwmark 0x2/0x2 lookup 102

думаю все равно придется сочетать Dante с маркировкой в таблицах. Так как клиентское по работает по сокс5..

06.11.2014 06:33 · отредактировано #399951

kolllak, если будете использовать IPTABLES, то лучше использовать его до конца (без SOCKS-прокси) а для учета трафика использовать что-то вроде IPCAD. Если же думаете использовать Dante, то посмотрите, должна вроде быть поддержка авторизации по MAC. Тогда можно и без особого участия IPTABLES.

06.11.2014 09:18 #399958

Позже выложу, как ток проверю.

06.11.2014 10:09 · отредактировано #399960

Блин а в v6 будет стучаться на определенный или нет ип?

А так прекрасно данте собираеться на debian.

cd /usr/src

wget https://www.inet.no/dante/files/dante-1.4.1.tar.gz

tar -zxvf dante-1.4.1.tar.gz

cd dante-1.4.1/

./configure --prefix=/opt/dante --sysconfdir=/opt/dante/etc --localstatedir=/opt/dante/var --disable-client --without-libwrap --without-bsdauth --without-gssapi --without-krb5 --without-upnp --without-pam

make
make install
checkinstall

mkdir -p /opt/dante/var/run
mkdir -p /opt/dante/etc
touch /var/log/sockd.log

touch /etc/init.d/sockd
chmod +x /etc/init.d/sockd

туды

text
#! /bin/sh
### BEGIN INIT INFO
# Provides:          sockd
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start the dante SOCKS server.
# Description:       SOCKS (v4 and v5) proxy server daemon (sockd).
#                    This server allows clients to connect to it and
#                    request proxying of TCP or UDP network traffic
#                    with extensive configuration possibilities.
### END INIT INFO
#
# dante SOCKS server init.d file. Based on /etc/init.d/skeleton:
# Version:  @(#)skeleton  1.8  03-Mar-1998  miquels@cistron.nl 
# Via: https://gitorious.org/dante/pkg-debian

PATH=/sbin:/usr/sbin:/bin:/usr/bin:/opt/dante/sbin NAME=sockd DAEMON=/opt/dante/sbin/$NAME DAEMON_ARGS="-D" PIDFILE=/opt/dante/var/run/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME DESC="Dante SOCKS daemon" CONFFILE=/opt/dante/etc/$NAME.conf

# Exit if the package is not installed [ -x "$DAEMON" ] || exit 0

# Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh

# Define LSB log_* functions. # Depend on lsb-base (>= 3.2-14) to ensure that this file is present # and status_of_proc is working. . /lib/lsb/init-functions

set -e

# This function makes sure that the Dante server can write to the pid-file. touch_pidfile () { if [ -r $CONFFILE ]; then uid="`sed -n -e 's/[[:space:]]//g' -e 's/#.*//' -e '/^user\.privileged/{s/[^:]*://p;q;}' $CONFFILE`" if [ -n "$uid" ]; then touch $PIDFILE chown $uid $PIDFILE fi fi }

case "$1" in start) if ! egrep -cve '^ *(#|$)' \ -e '^(logoutput|user\.((not)?privileged|libwrap)):' \ $CONFFILE > /dev/null then echo "Not starting $DESC: not configured." exit 0 fi echo -n "Starting $DESC: " touch_pidfile start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ || return 1 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ $DAEMON_ARGS \ || return 2 echo "$NAME." ;; stop) echo -n "Stopping $DESC: " start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME RETVAL="$?" [ "$RETVAL" = 2 ] && return 2 start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON [ "$?" = 2 ] && return 2 echo "$NAME." ;; reload|force-reload) # # If the daemon can reload its config files on the fly # for example by sending it SIGHUP, do it here. # # If the daemon responds to changes in its config file # directly anyway, make this a do-nothing entry. # echo "Reloading $DESC configuration files." start-stop-daemon --stop --signal 1 --quiet --pidfile \ $PIDFILE --exec $DAEMON -- -D ;; restart) # # If the "reload" option is implemented, move the "force-reload" # option to the "reload" entry above. If not, "force-reload" is # just the same as "restart". # echo -n "Restarting $DESC: " start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON sleep 1 touch_pidfile start-stop-daemon --start --quiet --pidfile $PIDFILE \ --exec $DAEMON -- -D echo "$NAME." ;; status) status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? ;; *) N=/etc/init.d/$NAME # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2 echo "Usage: $N {start|stop|restart|status|force-reload}" >&2 exit 1 ;; esac

exit 0

update-rc.d sockd defaults

nano /opt/dante/etc/sockd.conf

туды ну или свой конфиг

text
## general configuration (taken from FAQ; <URL:http://www.inet.no/dante/FAQ>)

internal: eth1 port = 1080 external: eth0 socksmethod: username none

user.privileged: root user.unprivileged: nobody socksmethod: none logoutput: /var/log/sockd.log

# LAN client pass { from: 192.168.1.0/24 to: 0.0.0.0/0 log: error }

# allow connect from anywhere as long as client was authed previously socks pass { from: 0.0.0.0/0 to: 0.0.0.0/0 command: connect log: error }

Ток заметил одну странность хоть и при configure указываем /opt/dante/etc он всё равно пытаеться взять с /etc.
На крайний случай просто создай конфиг в /etc/

06.11.2014 12:51 #399975

"Kettler" написал:
./configure --prefix=/opt/dante --sysconfdir=/opt/dante/etc --localstatedir=/opt/dante/var --disable-client --without-libwrap --without-bsdauth --without-gssapi --without-krb5 --without-upnp --without-pam
А почему в --sysconfigdir вы указали /opt/dante/etc? Разве не правильнее что нибудь типа /etc/dante?
06.11.2014 12:57 #399977

Я не люблю мусорить у себя, поэтому всё дело загнал в --prefix=/opt/dante. И чтоб больше некуда.

06.11.2014 13:10 · отредактировано #399981

Тут вот что интересно, клиенты в v6 если будут стучаться на любой хост то тогда iptables новрятли поможет.
Но как данте прожует типо такого:

internal: 111.111.111.111
external: eth0

internal: 2.2.2.2.2
external: eth1

ну и так далее хз. Просто возможно придётся запускать на каждый порт свою копию, но это вообщем надо тестить.\
Либо туннели, каждому клиенту свой ип через туннель. И тут уже делать маршрутизацию через каждый свой канал (iptables + tc).

07.11.2014 03:24 #400062

спасибо за помощь, попробую сегодня переварить и повторить рекомендации
с IPv6 выход куда угодно
я планировал поднимать виртуальные интерфейсы с IPv6 на борту каждого, на всякий можно было бы использовать конкретное указание по протоколу поддерживаемое Dante с версии 1.4.1 на подобии

text
internal.protocol: ipv4          - 1 IPv4 общий для всех.
internal: eth0 port = 1088
# или так: internal: 111.111.111.111 port = 1080
external.protocol: ipv6
external: eth0:1

а iptables с маркерами пробую использовать именно для сопоставления порта коннекта на IPv4 (internal) с выбором IPv6 на выход (external) (в случае одного виртуального внешнего интерфейса для клиентов с несколькими персональными IPv6). Либо если все же если использовать персонально для каждого клиента свой виртуальный интерфейс - для его указания.

Войдите или зарегистрируйтесь, чтобы ответить.