Создаем на обеих сторонах запускаемый файл /root/settunnel.sh
xxx.xxx.xxx.xxx – IP адрес внешнего интерфейса, данного сервера
yyy.yyy.yyy.yyy – IP адрес внешнего интерфейса, удаленного сервера
nnn.nnn.nnn – любая фэйк-под сеть, не используемая ни в первой ни во второй подсети(я использую 10.0.0)
в данной версии имеется в виду, что с обоих сторон сети имеют адреса 192.168.xxx.0/24, 192.168.yyy.0/24.
IP адреса внутренних интерфейсов соответственно 192.168.xxx.1, 192.168.yyy.1
файл /root/settunnel.sh со стороны машины, имеющей внешний адрес xxx.xxx.xxx.xxx
#!/bin/bash tnl=tnl0 remote=yyy.yyy.yyy.yyy local=xxx.xxx.xxx.xxx ip=nnn.nnn.nnn.1/30 ipr=nnn.nnn.nnn.2 range=nnn.nnn.nnn.0/30 ranged=192.168.yyy.0/24 ip tunnel del $tnl mode gre local $local remote $remote ttl 255 ip tunnel add $tnl mode gre local $local remote $remote ttl 255 ip addr add $ip dev $tnl ip link set $tnl up sleep 1 ip route add $ranged via $ipr
файл /root/settunnel.sh со стороны машины, имеющей внешний адрес yyy.yyy.yyy.yyy
#!/bin/bash tnl=tnl0 remote=xxx.xxx.xxx.xxx local=yyy.yyy.yyy.yyy ip=nnn.nnn.nnn.2/30 ipr=nnn.nnn.nnn.1 range=nnn.nnn.nnn.0/30 ranged=192.168.xxx.0/24 ip tunnel del $tnl mode gre local $local remote $remote ttl 255 ip tunnel add $tnl mode gre local $local remote $remote ttl 255 ip addr add $ip dev $tnl ip link set $tnl up sleep 1 ip route add $ranged via $ipr
Т.к. в Linux на несколько интерфейсов можно назначать один и тот же IP, данную процедуру можно упростить.
файл /root/settunnel.sh со стороны машины, имеющей внешний адрес xxx.xxx.xxx.xxx
#!/bin/bash tnl=tnl0 remote=yyy.yyy.yyy.yyy local=xxx.xxx.xxx.xxx ip=192.168.xxx.1 range=192.168.yyy.0/24 ip tunnel del $tnl mode gre local $local remote $remote ttl 255 ip tunnel add $tnl mode gre local $local remote $remote ttl 255 ip addr add $ip dev $tnl ip link set $tnl up ip route add $range dev $tnl
файл /root/settunnel.sh со стороны машины, имеющей внешний адрес yyy.yyy.yyy.yyy
#!/bin/bash tnl=tnl0 remote=xxx.xxx.xxx.xxx local=yyy.yyy.yyy.yyy ip=192.168.yyy.1 range=192.168.xxx.0/24 ip tunnel del $tnl mode gre local $local remote $remote ttl 255 ip tunnel add $tnl mode gre local $local remote $remote ttl 255 ip addr add $ip dev $tnl ip link set $tnl up ip route add $range dev $tnl
Теперь прописываем эти файлы в /etc/rc.d/rc.local для автоматического поднятия туннеля, при старте системы.
Указанные выше способы создание туннелей применимы практически на любой *NIX платформе, единственным критерием для их использования является наличие поддержки ip_gre, ядрами системы.
Далее пойдет речь о некоторых пакетах собранных исключительно под платформу Linux.
Со стороны машины, имеющей внешний адрес xxx.xxx.xxx.xxx, в папке /etc/net/ifaces создаем каталог с названием тунеля (tnl0).
В каталоге /etc/net/ifaces/tnl0 создаем три файла
/etc/net/ifaces/tnl0/ipv4address
nnn.nnn.nnn.1/30 scope global
192.168.yyy.0/24 via nnn.nnn.nnn.2
TYPE=iptun TUNTYPE=gre TUNLOCAL=xxx.xxx.xxx.xxx TUNREMOTE=yyy.yyy.yyy.yyy ONBOOT=yes
после этого даем команду
ifup tnl0
Со стороны машины, имеющей внешний адрес yyy.yyy.yyy.yyy, в папке /etc/net/ifaces создаем каталог с названием тунеля (tnl0).
В каталоге /etc/net/ifaces/tnl0 создаем три файла
/etc/net/ifaces/tnl0/ipv4address
nnn.nnn.nnn.2/30 scope global
192.168.xxx.0/24 via nnn.nnn.nnn.1
TYPE=iptun TUNTYPE=gre TUNLOCAL=yyy.yyy.yyy.yyy TUNREMOTE=xxx.xxx.xxx.xxx ONBOOT=yes
после этого даем команду
ifup tnl0
Т.к. в Linux на несколько интерфейсов можно назначать один и тот же IP, данную процедуру можно упростить.
Со стороны машины, имеющей внешний адрес xxx.xxx.xxx.xxx, в папке /etc/net/ifaces создаем каталог с названием тунеля (tnl0).
В каталоге /etc/net/ifaces/tnl0 создаем три файла
/etc/net/ifaces/tnl0/ipv4address
192.168.xxx.1/24 scope global
192.168.yyy.0/24 dev tnl0
TYPE=iptun TUNTYPE=gre TUNLOCAL=xxx.xxx.xxx.xxx TUNREMOTE=yyy.yyy.yyy.yyy ONBOOT=yes
после этого даем команду
ifup tnl0
Со стороны машины, имеющей внешний адрес yyy.yyy.yyy.yyy, в папке /etc/net/ifaces создаем каталог с названием тунеля (tnl0).
В каталоге /etc/net/ifaces/tnl0 создаем три файла
/etc/net/ifaces/tnl0/ipv4address
192.168.yyy.1/30 scope global
192.168.xxx.0/24 dev tnl0
TYPE=iptun TUNTYPE=gre TUNLOCAL=yyy.yyy.yyy.yyy TUNREMOTE=xxx.xxx.xxx.xxx ONBOOT=yes
после этого даем команду
ifup tnl0
К сожелению, на данный момент пакет ncsh, не потдерживает GRE туннелинг.
xxx.xxx.xxx.xxx – IP адрес внешнего интерфейса сервера
yyy.yyy.yyy.yyy – IP адрес внешнего интерфейса Cisco
nnn.nnn.nnn – любая фэйк-под сеть, не используемая ни в первой ни во второй подсети(я использую 10.0.0)
в данной версии имеется в виду, что со стороны Linux адрес внутренней сети 192.168.xxx.0/24, со стороны Cisco адрес внутренней сети 192.168.yyy.0/24. IP адреса внутренних интерфейсов соответственно 192.168.xxx.1, 192.168.yyy.1
Со стороны Cisco создаем туннель:
interface Tunnel1 ip address nnn.nnn.nnn.2 255.255.255.252 tunnel source yyy.yyy.yyy.yyy tunnel destination xxx.xxx.xxx.xxx
Прописываем маршрут:
ip route 192.168.xxx.0 255.255.255.0 Tunnel1
Со стороны Linux делаем запускаемый файл /root/settunnel.sh
#!/bin/bash tnl=tnl0 remote=yyy.yyy.yyy.yyy local=xxx.xxx.xxx.xxx ip=nnn.nnn.nnn.1/30 ipr=nnn.nnn.nnn.2 range=nnn.nnn.nnn.0/30 ranged=192.168.yyy.0/24 ip tunnel del $tnl mode gre local $local remote $remote ttl 255 ip tunnel add $tnl mode gre local $local remote $remote ttl 255 ip addr add $ip dev $tnl ip link set $tnl up sleep 1 ip route add $ranged via $ipr
Т.к. в Linux на несколько интерфейсов можно назначать один и тот же IP, данную процедуру можно упростить.
#!/bin/bash tnl=tnl0 remote=yyy.yyy.yyy.yyy local=xxx.xxx.xxx.xxx ip=192.168.xxx.1/24 ranged=192.168.yyy.0/24 ip tunnel del $tnl mode gre local $local remote $remote ttl 255 ip tunnel add $tnl mode gre local $local remote $remote ttl 255 ip addr add $ip dev $tnl ip link set $tnl up sleep 1 ip route add $ranged dev $tnl
Теперь прописываем эти файлы в /etc/rc.d/rc.local для автоматического поднятия туннеля, при старте системы.
xxx.xxx.xxx.xxx – IP адрес внешнего интерфейса, данной Cisco
yyy.yyy.yyy.yyy – IP адрес внешнего интерфейса, удаленной Cisco
nnn.nnn.nnn – любая фэйк-под сеть, не используемая ни в первой ни во второй подсети(я использую 10.0.0)
в данной версии имеется в виду, что с обоих сторон сети имеют адреса 192.168.xxx.0/24, 192.168.yyy.0/24.
IP адреса внутренних интерфейсов соответственно 192.168.xxx.1, 192.168.yyy.1
Со стороны данной Cisco создаем туннель:
interface Tunnel1 ip address nnn.nnn.nnn.1 255.255.255.252 tunnel source xxx.xxx.xxx.xxx tunnel destination yyy.yyy.yyy.yyy
Прописываем маршрут:
ip route 192.168.yyy.0 255.255.255.0 Tunnel1
Со стороны удаленной Cisco создаем туннель:
interface Tunnel1 ip address nnn.nnn.nnn.2 255.255.255.252 tunnel source yyy.yyy.yyy.yyy tunnel destination xxx.xxx.xxx.xxx
Прописываем маршрут:
ip route 192.168.xxx.0 255.255.255.0 Tunnel1
{в разработке}
Предпологается что IP внутреннего интерфейса сервера 192.168.0.1, сеть для выдачи адресов VPN-клентам 192.168.200.1–10
/etc/pptpd.conf
speed 115200 option /etc/ppp/options.pptpd localip 192.168.0.1 remoteip 192.168.200.1-10
/etc/ppp/options.pptpd
name pptpd refuse-pap refuse-chap refuse-mschap require-mschap-v2 require-mppe-128 ms-dns ip_DNS1 ms-dns ip_DNS2 lock bsdcomp 0 deflate 0 novj novjccomp nologfd lcp-echo-failure 3 lcp-echo-interval 20
формат:
# Secrets for authentication using CHAP # client server secret IP addresses user * password 192.168.200.N
прим. В системе должен быть подгружен модуль ppp_mppe, в Alt linux это делается дописываем строчки ppp_mppe в файл /etc/modules, для загрузки модуля в ручную делаем modprobe ppp_mppe
test?