Рейтинг:1

StrongSwan swanctl/xfrm: как замаскировать туннелируемый трафик?

флаг cn
  • Убунту 20.04ЛТС
  • StrongSwan swanctl 5.8.2
  • Linux 5.8.0-1035-gcp

Я пытаюсь настроить VPN IKEv2 «roadwarrior», которая откладывает аутентификацию радиуса до нашего вышестоящего сервера. Хорошая новость в том, что я может заставить клиентов подключаться и проходить аутентификацию RADIUS. Но я пробовал около миллиона вещей, но я не можем получить пакеты для пересылки. Я вижу трафик, поступающий в туннель, но он не будет исходить через NAT. Обратите внимание на мои попытки в сценарии updown попытаться передать трафик NAT безрезультатно (в настоящее время закомментировано).

Вот конфигурация:

sudo tee /etc/strongswan.d/charon-systemd.conf << "EOF"
charon-systemd {
# install_virtual_ip=нет
# install_routes=0
  load = random nonce aes sha1 sha2 hmac pem pkcs1 x509 отзыв curve25519 gmp curl kernel-netlink socket-default updown vici eap-radius eap-identity
  журнал {
   # Loglevel для конкретной подсистемы.
   # <подсистема> = <по умолчанию>
   # Уровень логирования по умолчанию.
   по умолчанию=2
   код = 1
   asn=1
  }

  плагины {
    eap-радиус {
      серверы {
        начальный {
          адрес=10.128.0.13
          секрет = супер-пупер-секрет
          auth_port=21812
        }
      }
    }
  }
}
EOF

sudo tee /etc/swanctl/conf.d/vpn.conf << "EOF"
соединения {
  rw-eap {
    версия=2
    предложения = aes128gcm16-sha256-modp2048
    локальные_адреса=10.128.0.14
    send_cert = всегда
    пулы = dhcp_ipv4
    местный {
      авторизация = публичный ключ
      сертификаты=vpn.pem
      идентификатор = vpn.xxx.com
    }
    удаленный {
      auth=eap-радиус
      идентификатор = *
    }
    дети {
      сеть {
        локальные_тс=0.0.0.0/0
        remote_ts=172.16.20.64/26
        if_id_in=%уникальный
        if_id_out=%уникальный
        mark_in=%уникальный
        mark_out=%уникальный
        updown=/usr/local/bin/rw-updown.sh
        esp_proposals=aes128gcm16-sha256-modp2048
      }
    }
  }
}
бассейны {
  dhcp_ipv4 {
    адрес=172.16.20.64/26
    DNS=10.128.0.9
  }
}
EOF

тройник /usr/local/bin/rw-updown.sh << "EOF"
#!/бин/баш

набор -o существительное
установить -о ошибка

XFRM_IF="xfrm${PLUTO_UNIQUEID}"

регистр "${PLUTO_VERB}" в
    клиент)
        logger -t "vpn rw-updown" ${PLUTO_VERB} ${PLUTO_UNIQUEID} ${XFRM_IF} ${PLUTO_ME} ${PLUTO_PEER} ${PLUTO_MARK_OUT%%/*} ${PLUTO_PEER_SOURCEIP}
        ip-ссылка добавить ${XFRM_IF} тип xfrm dev ens4 if_id ${PLUTO_UNIQUEID}
        IP-ссылка настроена ${XFRM_IF} вверх
# iptables -A FORWARD --in-interface ${XFRM_IF} -j ПРИНЯТЬ
# iptables --table nat -A POSTROUTING --out-interface ens4 -j MASQUERADE
        ;;
    вниз клиент)
# iptables -D FORWARD --in-interface ${XFRM_IF} -j ПРИНЯТЬ
# iptables --table nat -D POSTROUTING --out-interface ens4 -j MASQUERADE
        IP-ссылка на ${XFRM_IF}
        ;;
эсак
EOF
chmod +x /usr/local/bin/rw-updown.sh

Итак, после подключения клиента мы видим созданный интерфейс:

root@vpn-iowa:~# ip xfrm policy 
источник 0.0.0.0/0 dst 172.16.20.64/26 
    удалить приоритет 386687 
    пометить 0x2/0xffffffff 
    tmpl src 10.128.0.14 dst 173.197.16.118
        proto esp spi 0x08547b23 требуется двухрежимный туннель
    if_id 0x2
источник 172.16.20.64/26 dst 0.0.0.0/0 
    каталог вперед приоритет 386687 
    пометить 0x2/0xffffffff 
    tmpl источник 173.197.16.118 dst 10.128.0.14
        proto esp reqid 2-режимный туннель
    if_id 0x2
источник 172.16.20.64/26 dst 0.0.0.0/0 
    директор в приоритете 386687 
    пометить 0x2/0xffffffff 
    tmpl источник 173.197.16.118 dst 10.128.0.14
        proto esp reqid 2-режимный туннель
    if_id 0x2
источник 0.0.0.0/0 приемник 0.0.0.0/0 
    сокет с приоритетом 0 
источник 0.0.0.0/0 приемник 0.0.0.0/0 
    приоритет исходящего сокета 0 
источник 0.0.0.0/0 приемник 0.0.0.0/0 
    сокет с приоритетом 0

... более

И работает стабильно пинг 1.1.1.1 на клиенте вызывает прибытие трафика RX-пакеты 246:

root@vpn-iowa:~# ifconfig
ens4: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1460
        инет 10.128.0.14 сетевая маска 255.255.255.255 широковещательный 0.0.0.0
        inet6 fe80::4001:aff:fe80:e prefixlen 64 scopeid 0x20<ссылка>
        эфир 42:01:0a:80:00:0e txqueuelen 1000 (Ethernet)
        RX-пакеты 2668 байт 444824 (444,8 КБ)
        Ошибки RX 0 отброшено 0 переполнение 0 кадр 0
        Пакеты TX 1907 байт 586712 (586,7 КБ)
        Ошибки передачи 0 отброшено 0 превышение пропускной способности 0 несущей 0 коллизий 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
        инет 127.0.0.1 сетевая маска 255.0.0.0
        inet6 ::1 prefixlen 128 scopeid 0x10<хост>
        loop txqueuelen 1000 (локальная петля)
        RX-пакеты 140 байт 13208 (13,2 КБ)
        Ошибки RX 0 отброшено 0 переполнение 0 кадр 0
        Пакеты TX 140 байт 13208 (13,2 КБ)
        Ошибки передачи 0 отброшено 0 превышение пропускной способности 0 несущей 0 коллизий 0

xfrm2: flags=193<UP,RUNNING,NOARP> mtu 1500
        inet6 fe80::85d9:2aa5:841:803f prefixlen 64 scopeid 0x20<ссылка>
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
        RX-пакеты 246 байт 18819 (18,8 КБ)
        Ошибки RX 0 отброшено 0 переполнение 0 кадр 0
        Пакеты TX 0 байт 0 (0,0 Б)
        Ошибки передачи 0 отброшено 0 превышение пропускной способности 0 несущей 0 коллизий 0

Я навсегда буду у тебя в долгу, если ты поможешь мне с этим.Я прочитал миллион ресурсов и до сих пор не могу понять это. Спасибо!

флаг cn
Зачем вам назначать идентификаторы интерфейсов И метки? (Последнее на самом деле требует маркировки трафика вручную.) Вы читали страницу [VPN на основе маршрута] (https://wiki.strongswan.org/projects/strongswan/wiki/RouteBasedVPN) на вики strongSwan? Что касается переадресации, вы читали [эту вики-страницу](https://wiki.strongswan.org/projects/strongswan/wiki/ForwardingAndSplitTunneling)?
Jonathan S. Fisher avatar
флаг cn
Во-первых, спасибо, что нашли время ответить :) Метки остались, когда я пытался использовать vti вместо xfrm. Я могу удалить их, но это не имеет значения. Я прочитал обе страницы. У меня включена IP-переадресация в sysctl. Я пробовал как на основе маршрута, так и на основе политики, и я не могу заставить работать ни то, ни другое. Я предпочел бы VPN на основе маршрута, но на данный момент мне просто нужно _что-нибудь_ для работы
флаг cn
Однозначно удаляйте следы. Вам понадобится NAT (нет необходимости устанавливать его в сценарии updown, особенно если вы ожидаете несколько клиентов). Вам также нужен маршрут к виртуальному IP-адресу клиента через интерфейс XFRM (проверьте пример сценария VTI на первой странице, на которую я ссылался выше, вы можете сделать это аналогичным образом для интерфейсов XFRM). Однако вы также можете просто использовать один интерфейс и маршрут (для всей подсети 172.16.20.64/26) и избавиться от скрипта updown (настроить идентификатор статического интерфейса в конфигурации вместо %unique).
Jonathan S. Fisher avatar
флаг cn
круто, спасибо

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.