Поскольку на моем рабочем месте они используют Cisco VPN (протокол AnyConnect) для доступа к производственным и тестовым серверам, мне нужно всегда быть подключенным для работы на этих серверах.
Проблема в том, что VPN не реализует раздельное туннелирование, поэтому мне остается либо подключиться к Интернету, либо к серверам разработки (серверы разработки находятся в сегменте локальной сети), либо подключиться к производственным или тестовым серверам.
Мне пришла в голову идея использовать Raspberry Pi 3 для разделения vpn с помощью этого замечательного инструмента, называемого vpn-slice (https://github.com/dlenski/vpn-slice)
Действительно, это работает, и с малины я могу получить доступ к Интернету, серверам vpn и сегменту локальной сети.
Теперь проблемы следующие:
Компьютер, подключенный к hostapd, может выходить в Интернет, но не имеет доступа к локальной сети (LAN находится на 192.168.32.1/22, а внутренняя точка доступа Wi-Fi - 192.100.100.1/24), я думаю, мне может понадобиться мост, но я никогда не настраивал его (я я не из сетевого парня)
Я не могу получить доступ к vpn, так как на другом dev (tun0)
Итак, это результат моего 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
Надеюсь, это кому-то поможет!