Я успешно установил туннель IPSec между моим локальным хостом Linux и удаленным шлюзом VPN. Я использую виртуальные IP-адреса, назначаемые шлюзом, потому что моя локальная подсеть LAN не является фиксированной, поскольку я работаю на дороге.
Когда он включен, весь трафик проходит через туннель, включая интернет-трафик. Я бы хотел, чтобы весь трафик Кроме для локальной подсети для маршрутизации через туннель. Я прочитал и перечитал документацию Strongswan, но не могу понять, как это сделать.
Что мне нужно сделать?
Локальный ipsec.conf
config setup
conn %default
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
keyexchange=ikev2
authby=secret
conn VPN
left=%any
leftsourceip=%config
leftid=@robin.my.net
leftfirewall=yes
right=52.n.n.n
rightsubnet=0.0.0.0/0
rightid=@vpn.my.net
auto=add
Сервер ipsec.conf
config setup
conn %default
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
keyexchange=ikev2
conn AWSVPN
left=%any
leftsubnet=172.31.38.36/32
leftid=@vpn.my.net
leftfirewall=yes
authby=secret
right=%any
rightsourceip=10.3.0.0/28
auto=add
Шлюз
IP: 172.31.38.36 Подсеть: 172.31.32.0/20
Моя машина
IP: 192.168.1.150 (можно изменить) Подсеть: 192.168.1.0/24 (можно изменить) Виртуальный IP: 10.3.0.1 (назначается шлюзом Strongswan)
РЕДАКТИРОВАТЬ:
Мне удалось исключить локальную сеть, добавив это, но подсеть жестко запрограммирована:
conn local-net
leftsubnet=192.168.1.0/24
rightsubnet=192.168.1.0/24
authby=never
type=pass
auto=route
Не могу добавить комментарий из-за низкой репутации, так что вот он ..
Когда он открыт, весь трафик проходит через туннель, включая интернет-трафик.
Этого не может быть. Вы указываете на сервере «leftsubnet = 172.31.38.36 / 32», поэтому клиентское «rightsubnet = 0.0.0.0 / 0» будет сужено до одного этого хоста.
Чтобы направить весь трафик в VPN, на сервере вам также потребуется leftsubnet = 0.0.0.0 / 0.
В конфигурации по умолчанию Strongswan добавляет маршрут к подсети сервера в таблице 220, которая в случае подсети сервера '0.0.0.0/0' выглядит так:
$ ip route list table 220
default via 192.168.2.9 dev wlan0 proto static src 10.3.0.2
И эта таблица имеет приоритет над «основной» таблицей маршрутизации, используемой по умолчанию:
$ ip rule list
0: from all lookup local
220: from all lookup 220
32766: from all lookup main
32767: from all lookup default
Таким образом, когда клиент отправляет пакет в локальную LAN, этот пакет маршрутизируется по таблице 220, у которой нет маршрута к локальной LAN - только маршрут по умолчанию к серверу VPN. Таким образом, чтобы не маршрутизировать пакеты локальной LAN в VPN, вам просто нужно добавить маршрут к локальной LAN в таблице 220, например:
$ ip route add table 220 192.168.1.0/24 dev wlan0
Итак, таблица 220 теперь будет выглядеть так:
default via 192.168.2.9 dev wlan0 proto static src 10.3.0.2
192.168.2.0/24 dev wlan0 scope link
Другое возможное решение - использовать «основную» таблицу маршрутизации для маршрутизации подсети VPN («routing_table = 32766» в strongswan.conf), поскольку у нее уже будет маршрут к локальной сети. Но в этом случае текущий маршрут по умолчанию будет проблемой: strongswan не будет добавлять другой маршрут по умолчанию, если он уже существует.