[О блоге] [наверх] [пред] [2018-05-05 11:00:30+03:00] [2818519812d0d715cf41f1fde8d6faa98beaeea6]
Темы: [ipsec][ipv6]

IPv6 и IPsec удобства

Понадобилось мне с моей VDS-ки проксировать DNS запросы/ответы. Чтобы
было ещё один сервер постоянно доступный.

Первая часть задачи выполняется легко: поднимаю Unbound и вот уже
имеется кэширующий DNS. Но, на VDS-ке один IPv4 адрес на котором 53-ий
порт уже занят authoritative DNS сервером. Сразу мысль о том чтобы
поднять на другом порту, но потом вспоминаю: ведь у меня целых 2*64
адресов IPv6 из которых только один занят! Просто выбранный наугад в
качестве alias-а к своему сетевому интерфейсу:

    # cat >> /etc/rc.conf <<EOF
    ifconfig_xn0_alias0="inet6 2a03:5a00:17:123:50c2:1bff:fea8:dd4/64"
    EOF

и заставляю Unbound слушать на 53-ем порту на этом адресе:

    # cat /etc/unbound/unbound.conf
    server:
            verbosity: 1
            interface: ::1
            interface: 2a03:5a00:17:123:50c2:1bff:fea8:dd4
            do-daemonize: yes
            do-not-query-localhost: no
    forward-zone:
            name: "."
            forward-addr: X.X.X.X
            forward-addr: X.X.X.X

Крайне непривычно осознавать что каждое действие, каждое желание можно
выразить на отдельном IPv6 адресе, коих практически бесконечно.

Но теперь хотелось бы чтобы домашний провайдер не видел эти DNS запросы.
Первая мысль -- DNSCrypt. Но останавливает меня вся эта возня с
генерированием ключей на стороне сервера -- лень. Опять же, моё старое
классическое мышление тут подводит: ведь есть же IPsec специально
созданный для того, чтобы можно было по любому поводу создавать
безопасные соединения.

Racoon демон, предлагаемый handbook-ом FreeBSD, хоть и устаревший, стоит
у меня на всех системах. У всех общие базовые настройки, которые просто
копирую:

    path pre_shared_key "/usr/local/etc/racoon/psk.txt";
    log notify;

    remote anonymous
    {
            passive on;
            exchange_mode aggressive;
            my_identifier fqdn "unbound.stargrave.org";
            generate_policy on;
            lifetime time 24 hour;
            proposal {
                    encryption_algorithm aes;
                    hash_algorithm sha512;
                    authentication_method pre_shared_key;
                    dh_group modp2048;
            }
    }

    sainfo anonymous
    {
            pfs_group modp2048;
            lifetime time 24 hour;
            encryption_algorithm aes;
            authentication_algorithm hmac_md5;
            compression_algorithm deflate;
    }

    padding {
            randomize off;
    }

Мне надо сказать что связь между ...:dd4 адресом и мной должна
шифроваться (никаких туннелей, просто транспортный режим):

    # cat >> setkey.conf <<EOF
    spdadd 2a03:5a00:17:123:50c2:1bff:fea8:dd4 2001:470:1f12:aa9::2 any -P out
        ipsec esp/transport//require;
    spdadd 2001:470:1f12:aa9::2 2a03:5a00:17:123:50c2:1bff:fea8:dd4 any -P in
        ipsec esp/transport//require;
    EOF

и аналогичная симметричная настройка на противоположной машине.

И, объяснить racoon.conf как подключаться к машине с которой можно было
бы установить SA при срабатывании SP указанных выше (это copy-paste в
которой изменены только адреса и identifier-ы):

    remote "mail2.stargrave.org"
    {
            remote_address 2001:470:1f12:aa9::2;
            passive off;
            exchange_mode aggressive;
            verify_identifier on;
            my_identifier fqdn "unbound.stargrave.org";
            peers_identifier fqdn "mail2.stargrave.org";
            lifetime time 24 hour;
            proposal {
                    encryption_algorithm aes;
                    hash_algorithm sha512;
                    authentication_method pre_shared_key;
                    dh_group modp2048;
            }
    }

Всё! Теперь прозрачно IPsec будет устанавливаться при связи между ::2 и
...:dd4 машинами. Так как IPsec работает на сетевом уровне, то сказать
ему шифровать только определённые UDP/TCP порты не получится, но у нас
адресов хоть отбавляй, поэтому это и не нужно. И, опять же, не нужно
никаких классических полноценных VPN, туннелей или проксирования через
stunnel -- из коробки все современные ОС умеют IPsec рассчитанный на
использование в транспортном режиме, когда надо просто сказать что с
этим IP-шником по такому-то протоколу надо делать безопасно.

    [оставить комментарий]