В одной из ранее написанных мною статей, я рассказывал как раздать дома IPv6 безопасно для своих конечных устройств, а сегодня продолжу тему, но в плане веб сервера.
Мною будет развернута новая виртуальная машина, на которую будет подана сеть от IPv6 брокера. Затем на интерфейс будет назначено несколько IPv6 адресов от брокера, которые будет слушать веб сервер и проксировать трафик на IPv4 веб сервер.
И как говорил Юрий Алексеевич - Поехали!
Разворачиваем новую виртуальную машину и подаем туннель.
Тему разворачивания новой виртуальной машины опущу, будем считать её простой и понятной.
Следующий шаг - получить сеть у Hurricane Electric, как это сделать подробно описано в статье IPv6 без провайдера, так же и первичная настройка интерфейса he-ipv6 inet6 v4tunnel.
Подаем дополнительные IP на интерфейс
Все очень просто, на наш физический интерфейс ens192 подаются дополнительные ip адреса из выданной подсети.
Редактируем файл /etc/network/interfaces, добавляя дополнительные строчки.
auto ens192:1
iface ens192:1 inet6 static
address 2001:aaa:bbb4:682::6
netmask 64
auto ens192:2
iface ens192:2 inet6 static
address 2001:aaa:bbb4:682::12
netmask 64
После чего можно перезапустить сеть и поднять новые интерфейсы. И можно убедиться, что ICPM по этим вновь добавленным адресам пошел.
Делаем копию сертификатов с основного хоста
На основном Web сервере где все работает через IPv4 выписываются автоматически сертификаты для Let’s Encrypt, дабы не ломать уже то что работает будем настраивать автоматическое копирование сертификатов для нового сервера, например через SCP по планировщику. Сказано - сделано, но первым делом нужно настроить автоматическую авторизацию по ключу для scp и ssh. На сервере с IPv4 выполним генерацию пары ключа для подключения к IPv6 серверу, выполним команду:
ssh-keygen -t rsa -b 2048
После ее выполнения возникнет диалог в котором будет предложено ввести парольную фразу (данный шаг нужно пропустить дважды нажав Enter) и ввести путь для сохранения файлов публичного и приватного ключей. Публичный ключ по умолчанию сохраняется в ~/.ssh/id_rsa.pub.
Следом копируем публичный ключ на IPv6 веб сервер.
scp ~/.ssh/id_rsa.pub usrname@IPv6Server:/home/username/.ssh/authorized_keys_new
Подключаемся по SSH к IPv6Server с парольной авторизацией и добавляем ключ в разрешенные
ssh usrname@IPv6Server
cat /home/username/.ssh/.authorized_keys_new >> /home/username/.ssh/authorized_keys
Последующие авторизации будут проходить без запроса пароля.
Для копирования файлов сертификатов с IPv4 на IPv6 сервер можно выполнить команду на IPv4 сервере:
scp -r /home/username/conf/web/*/ssl/ usrname@IPv6Server:/var/certs/
После успешного выполнения, ее можно добавить в планировщик Crontab, для автоматического копирования сертификатов по расписанию.
Устанавливаем Nginx и проксируем хост
Ну вот собственно и все. Переходим к финишной прямой. Устанавливаем Nginx
apt install nginx
Теперь создаем новый конфигурационный файл в директории с конфигурациями выполнив
nano /etc/nginx/sites-available/ipv6_olorg.ru_ssl
Со следующим содержимым, подставляйте свои параметры для примера:
server {
listen [2001:aaa:bbb4:682::6]:443 default_server ssl http2;
server_name _ olorg.ru;
ssl_certificate /var/certs/ssl/olorg.ru.pem;
ssl_certificate_key /var/certs/ssl/olorg.ru.key;
ssl_stapling on;
ssl_stapling_verify on;
access_log /var/log/nginx/domains/olorg.ru.access.log main;
error_log /var/log/nginx/domains/olorg.ru.error.log error;
add_header Strict-Transport-Security "max-age=15768000;" always;
location / {
resolver 8.8.8.8 ipv6=off valid=30s;
proxy_pass https://olorg.ru:443;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header CF-Connecting-IP $remote_addr;
}
}
для файла nginx.conf добавим параметр лога main отредактировав файл /etc/nginx/nginx.conf добавив в секцию http содержимое
# Log format
log_format main '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
А но и внести правку в файл /etc/nginx/nginx.conf получения реального IP на ipv4serverе, у меня конфиг поправлен под CloudFlare, я добавляю и себя.
set_real_ip_from IP_адрес_с_которого_идет_соединение;
real_ip_header CF-Connecting-IP;
Для включения ранее созданного конфигурационного файла необходимо создать символьную ссылку на каталог активированных сайтов, выполнив следующую команду
ln -s /etc/nginx/sites-available/ipv6_olorg.ru_ssl /etc/nginx/sites-enabled/
После чего можно проверить конфигурацию nginx и если тест будет успешен можно перезагрузить конфигурацию второй командой
nginx -t
nginx -s reload
Собственно в таком случае получается и логи собираются и работает автоматический выпуск сертификатов и по двум версиям IP доступен сайт. Далее не забываем прописать "AAAA" запись для домена.
Если возникают вопросы, можно обсудить в моем Телеграм чате.