Инструменты пользователя

Инструменты сайта


wiki:iptables:tun0_to_tun2

Это старая версия документа!


Проброс TCP трафика через SSH

Конфигурация ssh

В файле /etc/ssh/sshd_config добавляем директивы для туннеля

nano etc/ssh/sshd_config
 
X11Forwarding yes
PermitTunnel yes

Создание туннеля ssh

Для создания туннеля используется скрипт tun.sh.

#!/bin/sh
 
. $(dirname "$0")/set.sh
 
echo -n "Starting SSH-VPN tunnel ..."
echo -n "Loading mod .."
modprobe tun
echo -n "Create tunnel forward ..."
ssh -f ${HOST} -p ${HOST_PORT} "ip link delete tun${TUN_REMOTE}" > /dev/null 2>&1
echo -n "Create tunnel bottom back ..."
ssh -w ${TUN_LOCAL}:${TUN_REMOTE} -f ${HOST} -p ${HOST_PORT} \
 "ip addr add ${IP_REMOTE}/${IP_MASK} dev tun${TUN_REMOTE} && ip link set tun${TUN_REMOTE} up && true"
 
sleep 3
 
echo -n "add route ..."
ip addr add ${IP_LOCAL}/${IP_MASK} dev tun${TUN_LOCAL}
ip link set tun${TUN_LOCAL} up
#ip route add ${NET_REMOTE} via ${IP_REMOTE}
echo "done."

Проброс трафика с tun0 на tun8 и обратно

Имеется два интерфейса на сервере - tun0 с локальной сетью (192.168.230.0/24) openvpn клиентов, второй (tun8) - SSH туннель

tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 192.168.230.1  netmask 255.255.255.0  destination 192.168.230.1
        inet6 fe80::891c:9c90:764a:72de  prefixlen 64  scopeid 0x20<link>
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 1000  (UNSPEC)
        RX packets 59021  bytes 48550863 (48.5 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 20562  bytes 13862348 (13.8 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
tun8: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 172.30.8.2  netmask 255.255.255.252  destination 172.30.8.2
        inet6 fe80::d121:b3d4:93f8:7a2c  prefixlen 64  scopeid 0x20<link>
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 500  (UNSPEC)
        RX packets 10688  bytes 6206716 (6.2 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 47834  bytes 47113670 (47.1 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Маршрутизация трафика

Добавляем таблицу маршрутизации для vpn

nano /etc/iproute2/rt_tables
 
#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
#1      inr.ruhep
1       vpn

Проброс трафика будем осуществлять скриптом маршрутизации r.sh

#!/bin/sh
 
. $(dirname "$0")/set.sh
 
iptables -F
iptables -t nat -F
iptables -t mangle -F
 
#iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
#iptables -t nat -A POSTROUTING -o tun8 -j MASQUERADE
iptables -t nat -A POSTROUTING -j MASQUERADE
#iptables -A INPUT -i tun8 -m state --state ESTABLISHED,RELATED -j ACCEPT
#iptables -A INPUT -i tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
 
iptables -A FORWARD -i tun$TUN_OVPN -o tun$TUN_REMOTE -s $NET_LOCAL -j ACCEPT
iptables -A FORWARD -i tun$TUN_REMOTE -o tun$TUN_OVPN -d $NET_LOCAL -j ACCEPT
 
#ip route del default dev tun$TUN_REMOTE  table vpn
#ip route del $NET_LOCAL dev eth0 table vpn
#ip rule del from $NET_LOCAL table vpn
 
ip route del default table vpn
ip route add default dev tun$TUN_REMOTE  table vpn
 
ip route del $NET_LOCAL dev $ETH_NAME table vpn
ip route add $NET_LOCAL dev $ETH_NAME table vpn
ip rule flush table vpn
ip rule add from $NET_LOCAL table vpn
 
iptables -L -nv
iptables -L -n -t nat

Настройки конфигурации туннеля

Настройки сохраняем в файле set.sh

#!/bin/bash
 
HOST=192.168.2.180
HOST_PORT=22
 
ETH_NAME='ens18'
TUN_OVPN=0                      # tun openvpn number here.
TUN_LOCAL=8                     # tun device number here.
TUN_REMOTE=8                    # tun device number there.
IP_LOCAL=172.30.8.2             # IP local for ssh tunnel
IP_REMOTE=172.30.8.1            # IP remote for ssh tunnel
IP_MASK=30                      # Subnet for ssh tunnel
NET_REMOTE=172.16.0.0/12        # Remote subnet for translate from (not used now)
NET_LOCAL=192.168.230.0/24      # openvpn subnet here.

Контроль и восстановление работоспособности туннеля ssh

Для контроля работы туннеля создадим скрипт test-tun.sh Его следует добавить в крон после проверки его работоспособности

#!/bin/bash
 
. $(dirname "$0")/set.sh
 
LOG=/var/log/route-test.log
log(){ echo "$(date '+%F %T') $@" >> $LOG; echo "$(date '+%F %T') $@";}
 
ping -c 3 $IP_REMOTE
if [ $? -eq  0 ]; then
        log 'ping success'
else
   echo "fail ping" >> $LOG
        log 'fail ping'
        pid=$(ps ax | grep $IP_REMOTE | head -n1 | awk '{print $1}' | xargs)
        kill -9 $pid
        log "kill old ssh tun $pid"
        sleep 9
        log "start new ssh tun"
        bash $(dirname "$0")/tun.sh
        sleep 2
        log "add routes to new ssh tunnel"
        bash $(dirname "$0")/r.sh
fi

MASQUERADE на целевом сервере

Важное замечание: на целевом сервере, где поднимается ssh туннель должно быть разрешен маскарадинг на интерфейсе tun, иначе работать туннель не будет

/etc/sysctl.conf
 
net.ipv4.ip_forward=1
 
 
iptables -t nat -A POSTROUTING -j MASQUERADE
wiki/iptables/tun0_to_tun2.1743695697.txt.gz · Последнее изменение: 2025/04/03 18:54 — Diman

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki