LINUX.ORG.RU
ФорумAdmin

Маршрутизация всего трафика через tun0

 , ,


0

1

Всем привет. Прошу прощения, наверняка этот вопрос обсуждался ранее, но ответа в FAQ не нашёл. Есть боевая машина (далее, server), осуществляющая маршрутизацию между двумя подсетями 10.1.28.0/22 (eth0) и 10.3.28.0/25 (eth1), расположенная внутри некоторого предприятия, и домашний сервер (далее, home). Над eth1 расположен мост br0 для Qemu/KVM. Между server и home настроен SSH-туннель c интерфейсами tun0 и tun1 соответственно. В скором времени к server будет подключен сетевой адаптер с интерфейсом eth2.

Вопрос: каким образом на server перенаправить при помощи route/iptables весь трафик с eth2 на tun0 (при этом не допустить выхода eth0 и eth1 к tun0), чтобы обеспечить доступ к подсети 192.168.1.0/24, в которой лежит home?

Приблизительная схема:

server:eth2 <--> server:tun0 <--> home:tun1 <--> home:eth0 <--> Интернет

route -n для server:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.16.0.0      0.0.0.0         255.255.255.252 U     0      0        0 tun0
10.3.28.0       0.0.0.0         255.255.255.128 U     0      0        0 br0
10.3.28.0       10.3.1.28       255.255.255.0   UG    0      0        0 eth0
10.3.0.0        0.0.0.0         255.255.252.0   U     0      0        0 eth0
0.0.0.0         10.3.1.1        0.0.0.0         UG    0      0        0 eth0

/etc/network/interfaces для server

auto lo br0
iface lo inet loopback

auto eth0
iface eth0 inet static
  address 10.3.1.28
  netmask 255.255.252.0
  gateway 10.3.1.1
  post-up route add -net 10.3.28.0 netmask 255.255.255.0 gw 10.3.1.28
  pre-down route del -net 10.3.28.0 netmask 255.255.255.0 gw 10.3.1.28

auto tun0
iface tun0 inet static
  pre-up ssh -S /var/run/ssh-tunnel -M -f -w 0:1 example.org true
  pre-up sleep 5
  post-up ip l s tun0 mtu 1300
  address 172.16.0.2    
  netmask 255.255.255.252
  pointopoint 172.16.0.1
  post-down ssh -S /var/run/ssh-tunnel -O exit example.org

iface eth1 inet manual
iface br0 inet static
  bridge_ports eth1
  address 10.3.28.1
  netmask 255.255.255.128
  bridge_stp off
  bridge_fd 0
  bridge_maxwait 0

route -n для home:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.16.0.0      0.0.0.0         255.255.255.252 U     0      0        0 tun1
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

/etc/network/interfaces для home

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
  address 192.168.1.100
  netmask 255.255.255.0
  network 192.168.1.0
  gateway 192.168.1.1
  broadcast 192.168.1.255

iface tun1 inet static
  address 172.16.0.1
  netmask 255.255.255.252
  pointtopoint 172.16.0.2
  post-up ip l s tun0 mtu 1300

Заранее благодарю.

Всё ИМХО, давно я этим не занимался. Вполне возможно что можно обойтись и без динамической маршрутизации.

Во-первых, как дополнитульная подстраховка, желательно явно заблокировать лишние подключения в FORWARD. Я бы создал отдельную цепочку eth2_check и потом

iptables -A FORWARD -i eth2 -o tun0 -j eth2_check
iptables -A FORWARD -i eth2 -o eth2 -j eth2_check
iptables -A FORWARD -i eth2 -j REJECT --reject-with icmp-net-unreachable ( или -j DROP )

Во-вторых, я бы создал отдельную таблицу маршрутизации

echo "100 eth2fenced" >> /etc/iproute2/rt_tables

ip route add 10.5.28.0/24 dev eth2 table eth2fenced # или какая там будет сеть на eth2
ip route add 192.168.1.0/24 via 172.16.0.1 dev tun0 table eth2fenced
ip route add default via 172.16.0.1 dev tun0 table

и правила для того, чтобы трафик попадал в эту таблицу. Правила сильно будут зависеть от того что тебе нужно. Я бы направлял в эту таблицу все соединения из eth2

# метим соединения
iptables -t mangle -A PREROUTING -i eth2 -j CONNMARK --set-mark 1
iptables -t mangle -A PREROUTING -i tun0 -d 10.5.28.0/24 -j CONNMARK --set-mark 1

# переносим метку соединения на пакеты
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark

# добавляем правило, оно работает по меткам пакетов
ip rule add fwmark 1 table eth2fenced
router ★★★★★ ()
Ответ на: комментарий от router

router, большое спасибо за комментарий.

Во-первых, по правде говоря, я допустил ошибку в описании: вместо 10.1.28.0/22 конечно же 10.3.0.0/22. Во-вторых, немного погоречился, сообщив, что eth2 не должен иметь доступа к eth0 и eth1. Дело в том, что трафик по SSH идёт в инкапсулированных HTTP-заголовках через HTTPS-прокси, расположенном в 10.0.0.0/8.

Вопрос: каким образом можно с eth2 маршрутизировать трафик с 10.0.0.0/8 на eth0, а на внешние адреса — через tun0? При этом желательно не поломать маршрутизацию от eth0 к eth1.

gongled ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.