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

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


wiki:iptables:tun0_to_tun2

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
wiki:iptables:tun0_to_tun2 [2025/04/03 15:07] Dimanwiki:iptables:tun0_to_tun2 [2025/04/03 18:57] (текущий) Diman
Строка 1: Строка 1:
 ====== Проброс TCP трафика через SSH ====== ====== Проброс TCP трафика через SSH ======
  
-===== конфигурация ssh ===== 
  
-В файл  **/etc/ssh/sshd_config** добавляем директивы для тунеля+ 
 +===== Конфигурация ssh ===== 
 + 
 +В файле  **/etc/ssh/sshd_config** добавляем директивы для туннеля
  
 <code bash> <code bash>
 +nano etc/ssh/sshd_config
  
 X11Forwarding yes X11Forwarding yes
 PermitTunnel yes PermitTunnel yes
- 
  
 </code> </code>
  
-Устанавливаем программы для работы туннеля 
  
-<code bash> 
  
-apt update +===== Создание туннеля ssh =====
-apt install uml-utilities+
  
- +Для создания туннеля используется скрипт tun.sh. В скрипте реализован туннель директивой ssh -w. Можно использовать autossh, который умеет сам контроллировать трафик и состояние туннеля.
-</code> +
- +
-==== Создание туннеля ssh ==== +
- +
-Для создания туннеля используется скрипт sh.+
 <code bash> <code bash>
 #!/bin/sh #!/bin/sh
Строка 51: Строка 44:
 </code> </code>
  
-==== Проброс трафика с tun0 на tun2 ====+==== Проброс трафика с tun0 на tun8 и обратно ====
  
  
Строка 78: Строка 71:
  
 </code> </code>
 +
 +==== Маршрутизация трафика ====
 +
 +Добавляем таблицу маршрутизации для vpn
  
 <code bash> <code bash>
-/etc/iproute2/rt_tables+nano /etc/iproute2/rt_tables
  
 # #
Строка 97: Строка 94:
 </code> </code>
  
 +Проброс трафика будем осуществлять скриптом маршрутизации r.sh
 +
 +<code bash>
 +#!/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
 +
 +</code>
 +
 +==== Настройки конфигурации туннеля ====
 +
 +Настройки сохраняем в файле **set.sh**
 +
 +<code bash>
 +#!/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.
 +
 +</code>
 +
 +==== Контроль и восстановление работоспособности туннеля ssh ====
 +
 +Для контроля работы туннеля создадим скрипт **test-tun.sh** Его следует добавить в крон после проверки его работоспособности 
 +
 +<code bash>
 +
 +#!/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
 +
 +</code>
 +
 +==== MASQUERADE на целевом сервере ====
 +
 +Важное замечание: на целевом сервере, где поднимается ssh туннель должно быть разрешен маскарадинг на интерфейсе tun, иначе работать туннель не будет
 +<code bash>
 +
 +/etc/sysctl.conf
 +
 +net.ipv4.ip_forward=1
 +
 +
 +iptables -t nat -A POSTROUTING -j MASQUERADE
 +</code>
wiki/iptables/tun0_to_tun2.1743682064.txt.gz · Последнее изменение: 2025/04/03 15:07 — Diman

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki