В настоящее время основным подходом к внедрению IPv6 является dual-stack, когда устройство одновременно настроено на функционирование обоих IP-протоколов. Это и понятно, ведь основная часть интернета работает на версии IPv4. Механизм 6to4 позволяет подключить ваше устройство IPv4 к брокеру, создав туннель в IPv6.
В первой части цикла статей показана настройка облачного маршрутизатора на routeros. В текущем материале продолжим раскручивать полученное решение, а затем перенесём соединение с брокером на Linux. Но сначала отдельно поговорим о сетевой безопасности подключаемого к IPv6 оборудования. Для понимания происходящих процессов рекомендуется ознакомиться с предыдущей статьёй, так как с целью исключения болтологии вводный материал повторяться не будет.
▍ Сетевая безопасность оконечных устройств
Важно понимать, что назначенный IPv6-адрес теперь светится в самый настоящий интернет напрямую, без всяких nat-технологий (в новом мире
nmap -6 2001:459:14:210::2
25/tcp filtered smtp
135/tcp open msrpc
445/tcp open microsoft-ds
1025/tcp open NFS-or-IIS
1026/tcp open LSA-or-nterm
1027/tcp open IIS
1030/tcp open iad1
1040/tcp open netsaint
3389/tcp open ms-wbt-server
5357/tcp open wsdapi
В IPv4 такое не встретишь, чтобы домашний Windows-компьютер прямо вот так вот был открыт на весь мир, а в IPv6 — пожалуйста. Поэтому соответствующее антивирусное обеспечение или встроенный брандмауэр здесь пригодятся. Но можно на сетевом уровне обойтись и без них, грамотно настроив firewall на chr. Для этого нужно узнать, какие службы на клиенте запущены и готовы работать с tcp- и udp-подключениями из внешнего мира:
# Для windows
netstat -abp tcp -ab
netstat -abp udp -ab
# Для linux
# netstat -tlnp
# netstat -ulnp
Активные подключения
Имя Локальный адрес Внешний адрес Состояние
TCP 0.0.0.0:135 RUVDS:0 LISTENING RpcSs [svchost.exe]
TCP 0.0.0.0:445 RUVDS:0 LISTENING Не удается получить сведения о владельце
TCP 0.0.0.0:1025 RUVDS:0 LISTENING [wininit.exe]
TCP 0.0.0.0:1026 RUVDS:0 LISTENING eventlog [svchost.exe]
TCP 0.0.0.0:1027 RUVDS:0 LISTENING Schedule [svchost.exe]
TCP 0.0.0.0:1030 RUVDS:0 LISTENING [lsass.exe]
TCP 0.0.0.0:1040 RUVDS:0 LISTENING [services.exe]
TCP 0.0.0.0:3389 RUVDS:0 LISTENING CryptSvc [svchost.exe]
TCP 0.0.0.0:5357 RUVDS:0 LISTENING
После этого создаём джентльменский набор правил в IPv6 firewall (в dual-stack сетевой экран следует настраивать как для IPv4, так и отдельно для IPv6), дополнив его правилами блокировки tcp- и udp-портов, работа которых не должна светиться в интернет:
/ipv6 firewall filter
add action=accept chain=input comment="Accept established,related" connection-state=established,related
add action=drop chain=input comment="Drop invalid" connection-state=invalid
add action=accept chain=input comment="Accept ICMP" protocol=icmpv6
add action=accept chain=input comment="defconf: accept UDP traceroute" port=33434-33534 protocol=udp
add action=drop chain=input comment="Drop all input"
add action=accept chain=forward comment="Accept established,related" connection-state=established,related
add action=drop chain=forward comment="Drop invalid" connection-state=invalid
add action=accept chain=forward comment="Accept ICMP" protocol=icmpv6
add action=accept chain=forward comment="Accept forward LAN packets" in-interface=pptp-in1 out-interface=ipv6_tunnel
add action=drop chain=forward comment="My windows TCP ports" dst-port=135,445,1025,1026,1027,1030,1040,3389,5357 in-interface=ipv6_tunnel out-interface=pptp-in1 protocol=tcp
add action=drop chain=forward comment="My windows UDP ports" dst-port=123,500,3702,4500,5353,5355 in-interface=ipv6_tunnel out-interface=pptp-in1 protocol=udp
Если необходим параноидальный режим безопасности, то можно ничего не вычислять, а просто обойтись одним блокирующим правилом, и всё тоже будет работать:
/ipv6 firewall filter add action=drop chain=forward comment="Drop all forwards"
Но тонкая настройка всегда может пригодиться в будущем. Результат повторного сканирования tcp- и udp-портов уверенно демонстрирует, что всё прикрыто, а значит безопасно:
nmap -6 2001:459:14:210::2
Nmap scan report for 2001:470:28:231::2
Host is up (0.12s latency).
Not shown: 984 closed ports
PORT STATE SERVICE
25/tcp filtered smtp
135/tcp filtered msrpc
445/tcp filtered microsoft-ds
1025/tcp filtered NFS-or-IIS
1026/tcp filtered LSA-or-nterm
1027/tcp filtered IIS
1030/tcp filtered iad1
1040/tcp filtered netsaint
3389/tcp filtered ms-wbt-server
5357/tcp filtered wsdapi
nmap -6 2001:470:28:231::2 –sU
Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-03 15:29 MSK
Host is up (0.12s latency).
Not shown: 994 closed ports
PORT STATE SERVICE
123/udp open|filtered ntp
500/udp open|filtered isakmp
3702/udp open|filtered ws-discovery
4500/udp open|filtered nat-t-ike
5353/udp open|filtered zeroconf
5355/udp open|filtered llmnr
Несмотря на простоту самого туннеля pptp, выход в IPv6-сеть он обеспечил. Закрыв вопрос с безопасностью клиентской машины, проверяем работу и исследуем новую часть интернет, доступа в которую ранее не было. Различные тесты можно пройти и при помощи браузера:
ping 2001:4860:4860::8888
ping -6 google.com
ping -4 google.com
▍ Туннелирование IPv6 до устройств домашней сети, которые не умеют работать с VPN
Получение маршрутизируемого в интернете IPv6-адреса позволяет подключаться к любому устройству из домашней сети напрямую. Это может быть удобно и интересно одновременно, особенно в контексте личных проектов из раздела сделай сам. Собирать рабочие решения и заставлять их трудиться на благо бывает полезно. Но не всегда есть возможность на оконечном оборудовании использовать VPN-клиенты. Тогда можно реализовать несколько другую схему, которая, кстати говоря, отражает механизмы, работающие на backend-стороне туннельного брокера.
Настроим следующую связку. В качестве VPN-клиента до chr будем использовать роутер домашней сети. У меня это будет тоже mikrotik, и если уж так, то воспользуемся их
/ip pool add name=pool_for_tunnel_in_lan ranges=192.168.99.1-192.168.99.2
/ppp profile add local-address=pool_for_tunnel_in_lan name=my_ppp_tunnels remote-address=pool_for_tunnel_in_lan use-encryption=required
/ppp secret add name=user01 profile=my_ppp_tunnels service=sstp password="123"
/interface sstp-server add name=sstp-in1 user=user01
/interface sstp-server server set authentication=mschap2 default-profile=my_ppp_tunnels enabled=yes
Однако на это раз автоматическое конфигурирование интерфейса (advertise=no) не будет работать, поэтому назначим статическую маршрутизацию IPv6 для интерфейса. Закрепим на обратной стороне туннеля небольшую /126 сеть. Разрешающее правило для firewall также расположим ранее правила drop для цепочки input:
/ipv6 address add address=2001:470:28:231::1/126 advertise=no interface=sstp-in1
/ipv6 route add disabled=no distance=1 dst-address=2001:470:28:231::4/126 gateway=2001:470:28:231::2 routing-table=main scope=30 target-scope=10
/ip firewall filter add action=accept chain=input comment="Accept SSTP" dst-port=443 protocol=tcp
Далее на домашнем роутере поднимем sstp-клиент, зададим на туннельном и bridge-интерфейсах IPv6-адреса из разных сетей, настроим маршрутизацию. Выходит некоторый аналог работы сервера брокера:
/interface sstp-client
add authentication=mschap2 connect-to=ip_адрес_chr disabled=no max-mtu=1280 \
name=sstp-out1 password=123 profile=default-encryption user=user01
/ipv6 address
add address=2001:470:28:231::2/126 advertise=no interface=sstp-out1
add address=2001:470:28:231:5/126 advertise=no interface=bridge
/ipv6 route
add distance=1 dst-address=2000::/3 gateway=2001:470:28:231::1
Имеем следующее распределение адресов:
Первая сеть:
- 2001:470:28:231::0/126 — сеть;
- 2001:470:28:231::1/126 — со стороны туннельного интерфейса chr;
- 2001:470:28:231::2/126 — со стороны туннельного интерфейса домашнего роутера;
- 2001:470:28:231::3/126 — не используется в нашей схеме («последний» адрес в IPv4-сетях является широковещательным, а в IPv6-сетях обычным).
Вторая сеть:
- 2001:470:28:231::4/126 — сеть;
- 2001:470:28:231::5/126 — на bridge-интерфейсе домашнего роутера;
- 2001:470:28:231::6/126 — для устройства из домашней сети;
- 2001:470:28:231::7/126 — не используется в нашей схеме.
Из соображений безопасности, чтобы в локальной сети не могло быть более одного труженика IPv6, о котором администратору не известно, можно попробовать прокинуть маршрут только до одного устройства, например 2001:470:28:231::6/126. Сделать это не получится. Routeros не разрешит задать IPv6-маршрут до конкретного хоста. Вместо этого неявно будет исправлен роут до всей сети:
/ipv6 route add disabled=no distance=1 dst-address=2001:470:28:231::6/126 \
gateway=2001:470:28:231::2 routing-table=main scope=30 target-scope=10
/ipv6 route print
Flags: D - DYNAMIC; A - ACTIVE; c - CONNECT, s - STATIC; + - ECMP
Columns: DST-ADDRESS, GATEWAY, DISTANCE
# DST-ADDRESS GATEWAY DISTANCE
…
1 As 2001:470:28:231::4/126 2001:470:28:231::2 1
Применим статическую IPv6-адресацию на устройстве из домашней сети, которое не умеет или не хочет работать с VPN-протоколами, как показано на рисунках ниже:
Сеть заведётся, dual-stack во всей красе. Осталось настроить firewall, это также можно сделать на chr или домашнем роутере. Уже описано выше. Когда на устройстве нет возможности посмотреть, какие соединения прослушиваются, следует прибегнуть к сетевому сканеру вроде nmap или connection tracking, если он есть у вашего маршрутизатора. По мне так nmap проще, но нужно помнить, что с параметрами по умолчанию он сканирует только порты до 1024 включительно, а также все порты с большими номерами, упомянутыми в файле nmap-services для протокола, по которому идёт сканирование, чего в 99% случаев достаточно. Чтобы отсканировать вообще все tcp- и udp-порты, применяются следующие ключи (готовьтесь к длительному ожиданию):
nmap -6 2001:470:28:231::2 –p0-65535
nmap -6 2001:470:28:231::2 –sU –p0-65535
▍ IPv4 to IPv6 на Linux
Проведённые настройки облачного маршрутизатора на routeros достаточно просты и наглядны. Однако арендовать целый сервер, чтобы установить на него chr только для доступа в IPv6, не обязательно. Всё это можно проделать и непосредственно в Linux. Сервер помимо этой изыскательской задачи может быть комбайном, нагруженным другими интересными и практическими функциями, как это обычно и бывает у практичных системных администраторов. Дальнейшее описание будет вестись на базе debian 11, к которому прикрутим IPv6. Чтобы подключиться к брокеру, добавим и запустим новый интерфейс:
nano /etc/network/interfaces
auto he-ipv6
iface he-ipv6 inet6 v4tunnel
address 2001:459:13:210::2
netmask 64
endpoint 216.66.80.90
local ip_адрес_сервера
ttl 255
gateway 2001:459:13:210::1
ifup he-ipv6
ip a
…
4: he-ipv6@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default qlen 1000
link/sit ip_адрес_сервера peer 216.66.80.90
inet6 2001:459:13:210::2/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::b905:f816/64 scope link
valid_lft forever preferred_lft forever
Сервер создал туннель в IPv6-интернет, который мы протянем до локалки. Вследствие этого VDS станет самым настоящим маршрутизатором, который должен передавать forward-пакеты далее по сети, для этого активируем IPv4- и IPv6-пересылки:
nano /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
sysctl -p
Можно тестировать соединение, проще всего это сделать, кинув пинги на адреса из нового диапазона. Также в Linux опционально настроим резолвинг на IPv6 DNS-серверах:
nano /etc/resolv.conf
nameserver 77.88.8.8
nameserver 77.88.8.1
nameserver 2001:4860:4860::8888
nameserver 2001:4860:4860::8844
▍ Промежуточные выводы
Во второй части цикла статей показан подход к обеспечению безопасности подключаемых к IPv6-клиентов. Настроено туннелирование до устройств сети, которые не умеют работать с vpn, используя домашний роутер в качестве шлюза на примере конфигурирования sstp и статической маршрутизации. Используя полученный практический опыт, перенесли подключение к брокеру IPv6 на Linux. В последней части материала настроим туннелирование IPv6 до устройств домашней сети посредством удобного и безопасного протокола l2tp. А для работы (в первую очередь мобильных устройств) дополнительно организуем ikev2, сделав на сервере неплохую связку для кроссплатформенного доступа в новый мир.
Весь цикл статей:
Как начать работать с IPv6 — часть 1. Общая настройка CHR. IPv4 to IPv6 на CHR. Туннелирование IPv6 до устройств домашней сети (CHR).
Как начать работать с IPv6 — часть 2. Сетевая безопасность оконечных устройств. Туннелирование IPv6 до устройств домашней сети, которые не умеют работать с VPN. IPv4 to IPv6 на Linux. ← Вы здесь
Как начать работать с IPv6 — часть 3. Туннелирование IPv6 до устройств домашней сети (Linux). Туннелирование IPv6 до мобильных устройств.
Как начать работать с IPv6 — часть 2. Сетевая безопасность оконечных устройств. Туннелирование IPv6 до устройств домашней сети, которые не умеют работать с VPN. IPv4 to IPv6 на Linux. ← Вы здесь
Как начать работать с IPv6 — часть 3. Туннелирование IPv6 до устройств домашней сети (Linux). Туннелирование IPv6 до мобильных устройств.
Узнавайте о новых акциях и промокодах первыми из нашего Telegram-канала ?