# stunnel  + ppp

## TangoFoxtrot

Итак задача - сделать софтовый шлюз + прокся и чуть поозже еще и днс. На этом шлюзе будут жить 2 туннеля. Собственно к деталям: Все будет работать на виртуальной машине(хост esxi5 u1) с Gentoo (ядро 3.7.10-r1) 

и туннели будут шифроваться средствами stunnel. Собственно проблема вот какая. Stunnel-и  на обоих концах зацепляюстя друг за друга 

```
    

    x.x.x.5.60495 > x.x.x.6.311: Flags [S], cksum 0x56f9 (correct), seq 3209597117, win 14600, options [mss 1460,sackOK,TS val 100029025 ecr 0,nop,wscale 7], length 0

    x.x.x.6.311 > x.x.x.5.60495: Flags [S.], cksum 0x7634 (correct), seq 3485034658, ack 3209597118, win 14480, options [mss 1460,sackOK,TS val 94741290 ecr 100029025,nop,wscale 7], length 0

    x.x.x.5.60495> x.x.x.6.311: Flags [.], cksum 0xdd1c (correct), seq 1, ack 1, win 115, options [nop,nop,TS val 100029026 ecr 94741290], length 0

```

 # netstat

```

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State

tcp        0    160 X.X.X.5:ssh            X.X.X.15:60009         ESTABLISHED

tcp        0      0 X.X.X.5:60495          X.X.X.6:311            ESTABLISHED

```

#ifconfig -a

```

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet X.X.X.5  netmask 255.255.255.0  broadcast X.X.X.255

        ether a4:0c:29:7f:3c:d3  txqueuelen 1000  (Ethernet)

        RX packets 276  bytes 23276 (22.7 KiB)

        RX errors 0  dropped 12  overruns 0  frame 0

        TX packets 73  bytes 8034 (7.8 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 16436

        inet 127.0.0.1  netmask 255.0.0.0

        loop  txqueuelen 0  (Local Loopback)

        RX packets 0  bytes 0 (0.0 B)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 0  bytes 0 (0.0 B)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

```

но вот pppd уже сам туннель не поднимает.

/var/log/messages c клиента x.x.x.5

```

013-05-20T14:30:08.352963+04:00 ShidzukuThrid stunnel: LOG5[3410:140688354506496]: Received signal 15; terminating

2013-05-20T14:30:08.407249+04:00 ShidzukuThrid stunnel: LOG5[3580:139830752294656]: stunnel 4.44 on x86_64-pc-linux-gnu platform

2013-05-20T14:30:08.407339+04:00 ShidzukuThrid stunnel: LOG5[3580:139830752294656]: Compiled/running with OpenSSL 1.0.1c 10 May 2012

2013-05-20T14:30:08.407514+04:00 ShidzukuThrid stunnel: LOG5[3580:139830752294656]: Threading:PTHREAD SSL:ENGINE Auth:none Sockets:POLL,IPv4

2013-05-20T14:30:08.407627+04:00 ShidzukuThrid stunnel: LOG5[3580:139830752294656]: Reading configuration from file /etc/stunnel/stunnel.conf

2013-05-20T14:30:08.407822+04:00 ShidzukuThrid stunnel: LOG6[3580:139830752294656]: Initializing SSL context for service ppp

2013-05-20T14:30:08.408518+04:00 ShidzukuThrid stunnel: LOG6[3580:139830752286464]: Local mode child started (PID=3582)

2013-05-20T14:30:08.409009+04:00 ShidzukuThrid stunnel: LOG6[3580:139830752286464]: connect_blocking: connecting x.x.x.6:311

2013-05-20T14:30:08.409574+04:00 ShidzukuThrid stunnel: LOG6[3580:139830752294656]: Peer certificate location /etc/stunnel/

2013-05-20T14:30:08.409763+04:00 ShidzukuThrid stunnel: LOG6[3580:139830752294656]: SSL context initialized

2013-05-20T14:30:08.409786+04:00 ShidzukuThrid stunnel: LOG5[3580:139830752294656]: Configuration successful

2013-05-20T14:30:08.410401+04:00 ShidzukuThrid pppd[3582]: Plugin rp-pppoe.so loaded.

2013-05-20T14:30:08.410489+04:00 ShidzukuThrid pppd[3582]: RP-PPPoE plugin version 3.8p compiled against pppd 2.4.5

2013-05-20T14:30:08.421527+04:00 ShidzukuThrid pppd[3582]: Plugin rp-pppoe.so loaded.

2013-05-20T14:30:08.421579+04:00 ShidzukuThrid pppd[3582]: RP-PPPoE plugin version 3.8p compiled against pppd 2.4.5

2013-05-20T14:30:08.421590+04:00 ShidzukuThrid pppd[3582]: pppd 2.4.5 started by root, uid 0

2013-05-20T14:30:08.421617+04:00 ShidzukuThrid pppd[3582]: Using interface ppp0

2013-05-20T14:30:08.421623+04:00 ShidzukuThrid pppd[3582]: Connect: ppp0 <--> /dev/pts/0

2013-05-20T14:30:38.454583+04:00 ShidzukuThrid pppd[3582]: LCP: timeout sending Config-Requests

2013-05-20T14:30:38.454713+04:00 ShidzukuThrid pppd[3582]: Connection terminated.

2013-05-20T14:30:38.460520+04:00 ShidzukuThrid pppd[3582]: Modem hangup

2013-05-20T14:30:38.460554+04:00 ShidzukuThrid pppd[3582]: Exit.

```

отдельный дебаг-лог pppd  /var/log/ppp.log  с клиента x.x.x.5

```

2013-05-20T14:30:08.421527+04:00 ShidzukuThrid pppd[3582]: Plugin rp-pppoe.so loaded.

2013-05-20T14:30:08.421579+04:00 ShidzukuThrid pppd[3582]: RP-PPPoE plugin version 3.8p compiled against pppd 2.4.5

2013-05-20T14:30:08.421590+04:00 ShidzukuThrid pppd[3582]: pppd 2.4.5 started by root, uid 0

2013-05-20T14:30:08.421611+04:00 ShidzukuThrid pppd[3582]: using channel 23

2013-05-20T14:30:08.421617+04:00 ShidzukuThrid pppd[3582]: Using interface ppp0

2013-05-20T14:30:08.421623+04:00 ShidzukuThrid pppd[3582]: Connect: ppp0 <--> /dev/pts/0

2013-05-20T14:30:08.421683+04:00 ShidzukuThrid pppd[3582]: sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xc2abe27d> <pcomp> <accomp>]

2013-05-20T14:30:11.424983+04:00 ShidzukuThrid pppd[3582]: sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xc2abe27d> <pcomp> <accomp>]

2013-05-20T14:30:14.428330+04:00 ShidzukuThrid pppd[3582]: sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xc2abe27d> <pcomp> <accomp>]

2013-05-20T14:30:17.431571+04:00 ShidzukuThrid pppd[3582]: sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xc2abe27d> <pcomp> <accomp>]

2013-05-20T14:30:20.434928+04:00 ShidzukuThrid pppd[3582]: sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xc2abe27d> <pcomp> <accomp>]

2013-05-20T14:30:23.438126+04:00 ShidzukuThrid pppd[3582]: sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xc2abe27d> <pcomp> <accomp>]

2013-05-20T14:30:26.441370+04:00 ShidzukuThrid pppd[3582]: sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xc2abe27d> <pcomp> <accomp>]

2013-05-20T14:30:29.444666+04:00 ShidzukuThrid pppd[3582]: sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xc2abe27d> <pcomp> <accomp>]

2013-05-20T14:30:32.448045+04:00 ShidzukuThrid pppd[3582]: sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xc2abe27d> <pcomp> <accomp>]

2013-05-20T14:30:35.451415+04:00 ShidzukuThrid pppd[3582]: sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xc2abe27d> <pcomp> <accomp>]

2013-05-20T14:30:38.454583+04:00 ShidzukuThrid pppd[3582]: LCP: timeout sending Config-Requests

2013-05-20T14:30:38.454713+04:00 ShidzukuThrid pppd[3582]: Connection terminated.

2013-05-20T14:30:38.460520+04:00 ShidzukuThrid pppd[3582]: Modem hangup

2013-05-20T14:30:38.460554+04:00 ShidzukuThrid pppd[3582]: Exit.

```

Спустя 5 минут таймаута друг друга теряют и стуннели

В инете нашел кучу "манов" , документация https://www.stunnel.org/howto.html и тп зачитана до дыр. man pppd но както не сростается. Симлинк на ppp0 присутсвует

Тоннель пока что в качестве теста запускаю между этой машиной и ее клоном( адрес , мак и хостнейм на клоне естественно изменен), находящиймся на том же хосте виртуализации.

итак после запуска стуннеля

netstat сервера

```

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State      

tcp        0    160 X.X.X.6:ssh            X.X.X.15:60009        ESTABLISHED

tcp        0      0   X.X.X.6:311            X.X.X.5:60494          ESTABLISHED

Active UNIX domain sockets (w/o servers)

Proto RefCnt Flags       Type       State         I-Node   Path

unix  5      [ ]         DGRAM                    5079     /dev/log

unix  3      [ ]         STREAM     CONNECTED     8236     

unix  3      [ ]         DGRAM                    4432     

unix  3      [ ]         STREAM     CONNECTED     8232     

unix  3      [ ]         STREAM     CONNECTED     8234     

unix  3      [ ]         STREAM     CONNECTED     8237     

unix  2      [ ]         DGRAM                    8240     

unix  3      [ ]         STREAM     CONNECTED     8231     

unix  3      [ ]         STREAM     CONNECTED     8235     

unix  3      [ ]         STREAM     CONNECTED     8238     

unix  2      [ ]         DGRAM                    5660     

unix  2      [ ]         DGRAM                    5702     

unix  3      [ ]         STREAM     CONNECTED     8239     

unix  3      [ ]         DGRAM                    4433     

unix  3      [ ]         STREAM     CONNECTED     8233     

unix  3      [ ]         STREAM     CONNECTED     8230 

```

кусок сислога с сервера

```

013-05-20T15:06:22.983037+04:00 Shidzuku stunnel: LOG5[30419:139775453955840]: Received signal 15; terminating

2013-05-20T15:06:23.042347+04:00 Shidzuku stunnel: LOG5[30506:140212947224320]: stunnel 4.44 on x86_64-pc-linux-gnu platform

2013-05-20T15:06:23.042421+04:00 Shidzuku stunnel: LOG5[30506:140212947224320]: Compiled/running with OpenSSL 1.0.1c 10 May 2012

2013-05-20T15:06:23.042469+04:00 Shidzuku stunnel: LOG5[30506:140212947224320]: Threading:PTHREAD SSL:ENGINE Auth:none Sockets:POLL,IPv4

2013-05-20T15:06:23.042533+04:00 Shidzuku stunnel: LOG5[30506:140212947224320]: Reading configuration from file /etc/stunnel/stunnel.conf

2013-05-20T15:06:23.042637+04:00 Shidzuku stunnel: LOG6[30506:140212947224320]: Initializing SSL context for service ppp

2013-05-20T15:06:23.043316+04:00 Shidzuku stunnel: LOG6[30506:140212947224320]: Peer certificate location /etc/stunnel/

2013-05-20T15:06:23.043670+04:00 Shidzuku stunnel: LOG6[30506:140212947224320]: SSL context initialized

2013-05-20T15:06:23.043767+04:00 Shidzuku stunnel: LOG5[30506:140212947224320]: Configuration successful

2013-05-20T15:06:25.213986+04:00 Shidzuku stunnel: LOG5[30507:140212947216128]: Service ppp accepted connection from x.x.x.5:60495

```

stunnel.conf server side

```

cert = /etc/stunnel/stunnel.pem

key = /etc/stunnel/stunnel.pem

pid = /chroot/stunnel.pid         #  /chroot пока с правами 777 

socket = l:TCP_NODELAY=1

socket = r:TCP_NODELAY=1

debug = 7

output = /chroot/stunnel.log

client = no

[ppp]

 client = no

 accept = 311

 exec = /usr/sbin/pppd

 execargs = pppd local debug passive # без последнего аргуменат тоже пробовал

 pty = yes

```

stunnel.conf client side

```

cert = /etc/stunnel/stunnel.pem

key = /etc/stunnel/stunnel.pem

pid = /chroot/stunnel.pid

socket = l:TCP_NODELAY=1

socket = r:TCP_NODELAY=1

debug = 7

output = /var/log/stunnel.log

client = yes

[ppp]

 connect = X.X.X.6:311

 exec = /usr/sbin/pppd

 execargs = pppd local debug 192.168.77.77:192.168.78.78 

 pty = yes

```

/etc/ppp/options 

```

lock

plugin rp-pppoe.so

noauth

```

```
net-misc/stunnel-4.44  USE="ssl -ipv6 -listen-queue (-selinux) -tcpd -xforward"

net-dialup/ppp-2.4.5-r3  USE="atm eap-tls -activefilter -dhcp -gtk -ipv6 -pam -radius"
```

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

куда еще копать пока не знаю .

----------

## Pinkbyte

А stunnel обязателен? Почему бы не воспользоваться OpenVPN?

----------

## TangoFoxtrot

В принципе не обязателен и я уже как раз смотрю в сторону альтернативных решений. но у меня уже есть пара туннелей поднятых на stunnel'е. Потому изначально выбор пал на него. Да и хочется всетаки понять почему на опенсусе все заводится из коробки. а на генте ни в какую. Что же я все таки упустил.

----------

## Pinkbyte

 *TangoFoxtrot wrote:*   

> В принципе не обязателен и я уже как раз смотрю в сторону альтернативных решений. но у меня уже есть пара туннелей поднятых на stunnel'е. Потому изначально выбор пал на него. Да и хочется всетаки понять почему на опенсусе все заводится из коробки. а на генте ни в какую. Что же я все таки упустил.

 

Ясно, я думал это первая попытка настройки подобной связки. Сам я подобное не настраивал, но с pppd дело имею плотно. Судя по логам вы настраиваете PPPoE поверх данного туннеля, на серверной стороне процесс pppd подымается? Я вижу строчку service accepted connection, но судя по тому, что в логах нет никакого упоминания от pppd - клиент тупо отваливается по-таймауту, т.к. не смог согласовать линию... И еще - добавьте аргумент dump к вызову pppd с обоих сторон. И попробуйте всё-таки убрать passive.

----------

## Pinkbyte

[quote="Pinkbyte"] *TangoFoxtrot wrote:*   

> В принципе не обязателен и я уже как раз смотрю в сторону альтернативных решений. но у меня уже есть пара туннелей поднятых на stunnel'е. Потому изначально выбор пал на него. Да и хочется всетаки понять почему на опенсусе все заводится из коробки. а на генте ни в какую. Что же я все таки упустил.

 

Ясно, я думал это первая попытка настройки подобной связки. Сам я подобное не настраивал, но с pppd дело имею плотно. Судя по логам вы настраиваете PPPoE поверх данного туннеля, на серверной стороне процесс pppd подымается? Я вижу строчку service accepted connection, но судя по тому, что в логах нет никакого упоминания от pppd - клиент тупо отваливается по-таймауту, т.к. не смог согласовать линию... И еще - добавьте аргумент dump к вызову pppd с обоих сторон. И попробуйте всё-таки убрать passive. И указать адрес на серверной стороне(строчку видать ip:, то есть без указания remote-адреса туннеля)Last edited by Pinkbyte on Thu May 23, 2013 8:24 am; edited 1 time in total

----------

## TangoFoxtrot

В общем не заработало. Идея осталась только одна - припоминая я что иногда были грабли с вкомпиливанием компонентов в ядро или наоборот в сборке отдельными модулями. Перебирать все подряд в разных вариантах уже нет сил ( 3 недели курю доки и маны в этом направлении местами натыкаясь на полное отсутсвие информации ,да и начальство уже результат требует ) пока отложил в долгий ящик. За минут 40 все отлично завелось в виде ipip туннеля . Шифрование мне сейчас особо не требуется, да и если что, то вариант openvpn уже опробован и работает. Спасибо за внимание!

----------

