Назад | Перейти на главную страницу

Точка доступа Linux как разделитель туннелей

Поскольку на моем рабочем месте они используют Cisco VPN (протокол AnyConnect) для доступа к производственным и тестовым серверам, мне нужно всегда быть подключенным для работы на этих серверах.

Проблема в том, что VPN не реализует раздельное туннелирование, поэтому мне остается либо подключиться к Интернету, либо к серверам разработки (серверы разработки находятся в сегменте локальной сети), либо подключиться к производственным или тестовым серверам.

Мне пришла в голову идея использовать Raspberry Pi 3 для разделения vpn с помощью этого замечательного инструмента, называемого vpn-slice (https://github.com/dlenski/vpn-slice)

Действительно, это работает, и с малины я могу получить доступ к Интернету, серверам vpn и сегменту локальной сети.

Теперь проблемы следующие:

Итак, это результат моего ifconfig:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.33.112  netmask 255.255.252.0  broadcast 192.168.35.255
        inet6 fe80::ba27:ebff:fe8b:bc4a  prefixlen 64  scopeid 0x20<link>
        ether b8:27:eb:8b:bc:4a  txqueuelen 1000  (Ethernet)
        RX packets 335923  bytes 94865354 (90.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 38890  bytes 12941447 (12.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 176  bytes 13688 (13.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 176  bytes 13688 (13.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1239
        inet 192.168.249.52  netmask 255.255.255.255  destination 192.168.249.52
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 500  (UNSPEC)
        RX packets 2  bytes 198 (198.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2  bytes 166 (166.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.100.100.1  netmask 255.255.255.0  broadcast 192.100.100.255
        inet6 fe80::ba27:ebff:fede:e91f  prefixlen 64  scopeid 0x20<link>
        ether b8:27:eb:de:e9:1f  txqueuelen 1000  (Ethernet)
        RX packets 39416  bytes 12108156 (11.5 MiB)
        RX errors 0  dropped 6  overruns 0  frame 0
        TX packets 56938  bytes 61317586 (58.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

И это мой маршрут -n

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.32.1    0.0.0.0         UG    0      0        0 eth0
10.128.231.134  0.0.0.0         255.255.255.255 UH    0      0        0 tun0
10.129.127.46   0.0.0.0         255.255.255.255 UH    0      0        0 tun0
10.129.127.48   0.0.0.0         255.255.255.255 UH    0      0        0 tun0
x.224.64.x      192.168.32.1    255.255.255.255 UGH   0      0        0 eth0
192.100.100.0   0.0.0.0         255.255.255.0   U     0      0        0 wlan0
192.168.32.0    0.0.0.0         255.255.252.0   U     0      0        0 eth0

и это то, что я использую для маскировки беспроводной точки доступа (wlan0) в Интернет:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

Я понятия не имею, как маршрутизировать wlan0 на семейство eth0 (lan) и на серверы tun0 (vpn) (обратите внимание, что мне нужен только конкретный сервер, содержащийся в команде маршрута)

Спасибо всем, кто поможет!

Итак, я понял, в чем проблема.

Поскольку моя политика по умолчанию - принимать прямой трафик, нет смысла использовать правила пересылки (иначе мне понадобились бы даже правила пересылки wlan0 <--> tun0)

Все, что мне нужно было сделать, это замаскировать даже tun0, чтобы адрес можно было переписать.

Я использовал:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

Теперь я могу получить доступ к интернету, локальной сети и vpn

Надеюсь, это кому-то поможет!