LINUX.ORG.RU
решено ФорумAdmin

Маршрутизация в ipsec strongswan

 , , , ,


1

1

Доброго времени суток. Пытаюсь разобраться с strongswan. Есть виртуальный сервер с поднятым туннелем WireGuard до маршрутизатора за которым находится сеть 10.0.0.0/24. Из виртуального сервера я сеть 10.0.0.0/24 вижу, однако у меня есть устройства которые поднимают с виртуальным сервером ikev2 туннель получают виртуальные адреса 10.97.1.0/24 и попасть в сеть 10.0.0.0/24 не могут. tcpdump показывает что все пакеты касательно сети 10.0.0.0/24 от устройств ikev2 уходят по маршруту по умолчанию в интерфейс с интернетом. Покапался немного в мануалах, узнал что ipsec использует таблицу 220, добавил маршрут в эту таблицу, поведение осталось прежнее. Вроде ничего сложного здесь нет, но я где-то туплю и не могу разобраться как работает маршрутизация в ipsec, я читал про политики, но для клиентов у меня разрешено на 0.0.0.0/0. Подскажите, где я думаю не так, и где можно более развернуто найти материал на тему работы ipsec кроме wiki strongswan. Пинать можно, но не сильно, я слаб в этой теме, только учусь. Есть мысли сделать интерфейс VTI или XFRM но хотелось бы без них.

Накидал схемку для наглядности: https://imageup.ru/img20/4836245/diagramma-bez-nazvaniia.jpg

Конфигурация strongswan на виртуальном сервере

$ sudo cat /etc/strongswan/swanctl/conf.d/my_vpn.conf

connections {
    ikev2-eap-mschapv2 {
        version = 2
        proposals = aes256-sha256-modp4096,aes256-sha256-modp2048,aes256gcm16-sha256-modp1024
        rekey_time = 0s
        pools = pool-ipv4
        fragmentation = yes
        dpd_delay = 30s
        send_cert=always
        unique = never
        local {
            id = vpn.infra.com
            certs = fullchain.pem
        }
        remote {
            auth = eap-mschapv2
            eap_id = %any
        }
        children {
            ikev2-eap-mschapv2 {
                local_ts = 0.0.0.0/0
                rekey_time = 0s
                dpd_action = clear
                esp_proposals = aes256-sha256-sha1
            }
        }
    }
}

pools {
    pool-ipv4 {
        addrs = 10.97.1.0/24
        dns = 8.8.8.8, 1.1.1.1
    }
}

secrets {
    eap-User1 {
        id = user
        secret = "passwd"
    }
}

Маршруты на виртуальном сервере:

$ sudo ip r s table all
10.0.0.0/24 via 10.97.0.2 dev wg0 table 220
default via 217.30.10.129 dev eth0 proto static metric 100
10.0.0.0/24 via 10.97.0.2 dev wg0
10.97.0.0/24 dev wg0 proto kernel scope link src 10.97.0.1
217.30.10.128/25 dev eth0 proto kernel scope link src 217.30.10.160 metric 100
local 10.97.0.1 dev wg0 table local proto kernel scope host src 10.97.0.1
broadcast 10.97.0.255 dev wg0 table local proto kernel scope link src 10.97.0.1
local 127.0.0.0/8 dev lo table local proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo table local proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo table local proto kernel scope link src 127.0.0.1
local 217.30.10.160 dev eth0 table local proto kernel scope host src 217.30.10.160
broadcast 217.30.10.255 dev eth0 table local proto kernel scope link src 217.30.10.160
::1 dev lo proto kernel metric 256 pref medium
2a06:f900:4001:100::/56 dev eth0 proto kernel metric 100 pref medium
2a06:f900:4001:100::/56 dev eth0 proto kernel metric 256 pref medium
fd97::/64 dev wg0 proto kernel metric 256 pref medium
fe80::/64 dev eth0 proto kernel metric 1024 pref medium
default via 2a06:f900:4001:100::1 dev eth0 proto static metric 100 pref medium
local ::1 dev lo table local proto kernel metric 0 pref medium
anycast 2a06:f900:4001:100:: dev eth0 table local proto kernel metric 0 pref medium
local 2a06:f900:4001:100:9005:9005:1d16:3e6d dev eth0 table local proto kernel metric 0 pref medium
local 2a06:f900:4001:100:9005:9005:7d1b:b3bb dev eth0 table local proto kernel metric 0 pref medium
local 2a06:f900:4001:100:9005:9005:8b5c:f4d6 dev eth0 table local proto kernel metric 0 pref medium
local 2a06:f900:4001:100:9005:9005:aa5e:c787 dev eth0 table local proto kernel metric 0 pref medium
local 2a06:f900:4001:100:9005:9005:adcb:5aac dev eth0 table local proto kernel metric 0 pref medium
local 2a06:f900:4001:100:9005:9005:c39f:44a7 dev eth0 table local proto kernel metric 0 pref medium
local 2a06:f900:4001:100:9005:9005:d024:fa98 dev eth0 table local proto kernel metric 0 pref medium
anycast fd97:: dev wg0 table local proto kernel metric 0 pref medium
local fd97::1 dev wg0 table local proto kernel metric 0 pref medium
anycast fe80:: dev eth0 table local proto kernel metric 0 pref medium
local fe80::216:3eff:fed5:1b2d dev eth0 table local proto kernel metric 0 pref medium
multicast ff00::/8 dev eth0 table local proto kernel metric 256 pref medium
multicast ff00::/8 dev wg0 table local proto kernel metric 256 pref medium

tcpdump при обращении к этой сети:

sudo tcpdump -i any -nn net 10.0.0.0/24 and icmp
tcpdump: data link type LINUX_SLL2
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
11:24:19.584873 eth0  In  IP 10.97.1.1 > 10.0.0.2: ICMP echo request, id 33, seq 1, length 64
11:24:20.664840 eth0  In  IP 10.97.1.1 > 10.0.0.2: ICMP echo request, id 34, seq 1, length 64
11:24:21.774895 eth0  In  IP 10.97.1.1 > 10.0.0.2: ICMP echo request, id 35, seq 1, length 64
11:24:22.924797 eth0  In  IP 10.97.1.1 > 10.0.0.2: ICMP echo request, id 36, seq 1, length 64
11:24:24.034847 eth0  In  IP 10.97.1.1 > 10.0.0.2: ICMP echo request, id 37, seq 1, length 64

P.S. AlmaLinux 9.4 с firewalld, могу выложить его конфиг, но там все примитивно.


Ответ на: комментарий от thesis

ip forward включен. Проблему вроде нашел, после отключения firewalld начало работать. Походу нашел в чем причина, вот только осталось понять какое правило для firewalld накидать, т.к. sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=10.97.1.0/24 destination address=10.0.0.0/24 accept' не помогло.

Shiroe
() автор топика

Решено, проблема была в вонючем firewalld, до конца не вник в его работу, там какие-то приколы с зонами. Добавление сети 10.97.0.0/24 в trusted зону решило проблему. Насколько это правильно предстоит узнать позже, но пока работает.

firewall-cmd --zone=trusted --permanent --add-source=10.97.1.0/24

Shiroe
() автор топика