Jump to content
  • 1

Wireguard ipv6


avn

Question

Добрый день!

Может кому-то пригодится выборочная маршрутизация через Wireguard по ipv6.

На версии 3.7.4 ipv6 адрес на интерфейсе nwg можно было задать командой:

interface Wireguard2 ipv6 address fd01:5ca1:ab1e:891f:c4fc:4a2e:e64d:503d

На версии 3.8.2 эта команда не работает. Поэтому был модифицирован скрипт /opt/etc/ndm/ifstatechanged.d/000-fix-Wireguard2.sh

#!/bin/sh

[ "$1" == "hook" ] || exit 0
[ "$change" == "link" ] || exit 0
[ "$id" == "Wireguard2" ] || exit 0

ip6t() {
	if ! ip6tables -C "$@" &>/dev/null; then
		ip6tables -A "$@"
	fi
}

case ${id}-${change}-${connected}-${link}-${up} in
	${id}-link-yes-up-up)
	cat << EOF >/tmp/fix-${id}.conf
[Interface]
PrivateKey = MMVM2wVNQqUyug1cBY=
[Peer]
PublicKey = bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = engage.cloudflareclient.com:2408
EOF

		ip -6 addr add fd01:5ca1:ab1e:891f:c4fc:4a2e:e64d:503d/128 dev nwg2
		wg setconf nwg2 /tmp/fix-${id}.conf
		ip6t POSTROUTING -t nat -o nwg2 -j MASQUERADE
	;;
esac

exit 0

Сам тест:

wg show nwg2
ifconfig nwg2

ip -6 rule add from all lookup 123 priority 1123
ip -6 route add table 123 2a03:1b20:1:f410::ff1 dev nwg2

ip -6 rule
ip -6 route show table 123

traceroute6 2a03:1b20:1:f410::ff1

Результат:

~ # uname -a
Linux ZyAvenger 4.9-ndm-5 #0 SMP Tue Jun 21 16:39:31 2022 mips GNU/Linux
~ # wg show nwg2
interface: nwg2
  public key: JL+TtFAHd2heTNrACYj8tlkn9f4rrZi7auvuQRBkajY=
  private key: (hidden)
  listening port: 49203

peer: bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=
  endpoint: [2606:4700:d0::a29f:c001]:2408
  allowed ips: 0.0.0.0/0, ::/0
  latest handshake: 1 minute, 33 seconds ago
  transfer: 15.29 KiB received, 6.19 KiB sent
~ # ifconfig nwg2
nwg2      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:172.16.0.2  P-t-P:172.16.0.2  Mask:255.255.255.255
          inet6 addr: fd01:5ca1:ab1e:891f:c4fc:4a2e:e64d:503d/128 Scope:Global
          UP POINTOPOINT RUNNING NOARP  MTU:1280  Metric:1
          RX packets:52643 errors:0 dropped:53 overruns:0 frame:0
          TX packets:63283 errors:3 dropped:1 overruns:0 carrier:0
          collisions:0 txqueuelen:50
          RX bytes:14968865 (14.2 MiB)  TX bytes:8037372 (7.6 MiB)

~ # ip -6 rule
0:      from all lookup local
233:    from all fwmark 0x2333 lookup 233
1123:   from all lookup 123
1778:   from all fwmark 0xd1001 lookup 1001
32766:  from all lookup main
~ # ip -6 route show table 123
2a03:1b20:1:f410::ff1 dev nwg2  metric 1024  pref medium
~ # traceroute6 2a03:1b20:1:f410::ff1
traceroute to 2a03:1b20:1:f410::ff1 (2a03:1b20:1:f410::ff1) from fd01:5ca1:ab1e:891f:c4fc:4a2e:e64d:503d, port 33434, from port 45415, 30 hops max, 60 bytes packets
 1  fd01:5ca1:ab1e::1 (fd01:5ca1:ab1e::1)  10.845 ms  10.961 ms  10.997 ms
 2  2400:cb00:87:1000::1 (2400:cb00:87:1000::1)  11.906 ms  17.869 ms  20.842 ms
 3  mow-b4-link.ip.twelve99.net (2001:2000:3080:539::1)  11.994 ms  11.797 ms  11.299 ms
 4  mow-b8-v6.ip.twelve99.net (2001:2034:0:220::1)  11.474 ms  11.974 ms  12.476 ms
 5  kbn-bb2-v6.ip.twelve99.net (2001:2034:1:78::1)  40.321 ms  41.409 ms  72.470 ms
^C22% completed...

 

  • Thanks 4
Link to comment
Share on other sites

Recommended Posts

  • 0
В 09.11.2022 в 13:45, Le ecureuil сказал:

Все будет в версии 4.0.

interface ipv6 address уже появилась опять, и работает правильно + можно задавать allow-ips в ipv6-формате + роутинг через force-default позволяет сделать дефолтным.

Осталось доделать NAT66, но тут больше вопросов компоновки чем технических проблем.

Спасибо. @Le ecureuil На версии 3.8.4.5/3.9 можно задавать allow-ips в ipv6 формате? Смущают фразы "уже появилась опять" и "можно задавать"

Edited by avn
Link to comment
Share on other sites

  • 0
В 09.11.2022 в 13:45, Le ecureuil сказал:

Все будет в версии 4.0.

interface ipv6 address уже появилась опять, и работает правильно + можно задавать allow-ips в ipv6-формате + роутинг через force-default позволяет сделать дефолтным.

Осталось доделать NAT66, но тут больше вопросов компоновки чем технических проблем.

а это все будет доступно только в CLI или и в CLI и в WebGUI

Link to comment
Share on other sites

  • 0

Для истории и тех, кто держит wg-server. Для того, что бы избавиться от ната, надо:

1.  Прописать sysctl

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1

net.ipv6.conf.eth0.forwarding=1
net.ipv6.conf.eth0.proxy_ndp=1

2. Модифицировать скрипт запуска Wireguard, добавив в него строки с "proxy", где ipv6 - адреса из Вашего диапазона у поставщика wg

[Unit]
Before=network.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/iptables -A FORWARD -i eth0 -o wg0 -j ACCEPT
ExecStart=/usr/sbin/iptables -A FORWARD -i wg0 -j ACCEPT
ExecStart=/usr/sbin/iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE
ExecStop=/usr/sbin/iptables -D FORWARD -i eth0 -o wg0 -j ACCEPT
ExecStop=/usr/sbin/iptables -D FORWARD -i wg0 -j ACCEPT
ExecStop=/usr/sbin/iptables -D POSTROUTING -t nat -o eth0 -j MASQUERADE
ExecStart=/usr/sbin/ip6tables -A FORWARD -i wg0 -j ACCEPT
#ExecStart=/usr/sbin/ip6tables -A POSTROUTING -t nat -o eth0 -j MASQUERADE
ExecStart=/usr/sbin/ip -6 neigh add proxy 2a00:bbbb:1000:1022::97:91 dev eth0 nud permanent
ExecStop=/usr/sbin/ip6tables -D FORWARD -i wg0 -j ACCEPT
#ExecStop=/usr/sbin/ip6tables -D POSTROUTING -t nat -o eth0 -j MASQUERADE
ExecStop=/usr/sbin/ip -6 neigh del proxy 2a00:bbbb:1000:1022::97:91 dev eth0
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target

3. Модифицировать серверный и клиентский конфиги wg, прописав туда адреса, указанные выше в п.2

[Interface]
PrivateKey = ....
Address = 172.16.97.91/32, 2a00:bbbb:1000:1022::97:91/128
DNS = 1.1.1.1, 8.8.8.8

[Peer]
PublicKey = ....
Endpoint = aa.bb.cc.dd:993
AllowedIPs = 0.0.0.0/0, 2000::/3
PersistentKeepalive = 25

4. Ну и поиск по proxy_ndp в google.

 

P/S/ В принципе вариантов использования proxy_ndp море. Можно к примеру раскидать из домашней сети - кинетика адреса для клиентов wg-кинетик-сервера аналогичным способом.

Edited by avn
Link to comment
Share on other sites

  • 0
10 минут назад, avn сказал:

Для истории и тех, кто держит wg-server. Для того, что бы избавиться от ната, надо:

1.  Прописать sysctl

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1

net.ipv6.conf.eth0.forwarding=1
net.ipv6.conf.eth0.proxy_ndp=1

2. Модифицировать скрипт запуска Wireguard, добавив в него строки с "proxy", где ipv6 - адреса из Вашего диапазона у поставщика wg

[Unit]
Before=network.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/iptables -A FORWARD -i eth0 -o wg0 -j ACCEPT
ExecStart=/usr/sbin/iptables -A FORWARD -i wg0 -j ACCEPT
ExecStart=/usr/sbin/iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE
ExecStop=/usr/sbin/iptables -D FORWARD -i eth0 -o wg0 -j ACCEPT
ExecStop=/usr/sbin/iptables -D FORWARD -i wg0 -j ACCEPT
ExecStop=/usr/sbin/iptables -D POSTROUTING -t nat -o eth0 -j MASQUERADE
ExecStart=/usr/sbin/ip6tables -A FORWARD -i wg0 -j ACCEPT
#ExecStart=/usr/sbin/ip6tables -A POSTROUTING -t nat -o eth0 -j MASQUERADE
ExecStart=/usr/sbin/ip -6 neigh add proxy 2a00:bbbb:1000:1022::97:91 dev eth0 nud permanent
ExecStop=/usr/sbin/ip6tables -D FORWARD -i wg0 -j ACCEPT
#ExecStop=/usr/sbin/ip6tables -D POSTROUTING -t nat -o eth0 -j MASQUERADE
ExecStop=/usr/sbin/ip -6 neigh del proxy 2a00:bbbb:1000:1022::97:91 dev eth0
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target

3. Модифицировать серверный и клиентский конфиги wg, прописав туда адреса, указанные выше в п.2

[Interface]
PrivateKey = ....
Address = 172.16.97.91/32, 2a00:bbbb:1000:1022::97:91/128
DNS = 1.1.1.1, 8.8.8.8

[Peer]
PublicKey = ....
Endpoint = aa.bb.cc.dd:993
AllowedIPs = 0.0.0.0/0, 2000::/3
PersistentKeepalive = 25

4. Ну и поиск по proxy_ndp в google.

 

P/S/ В принципе вариантов использования proxy_ndp море. Можно к примеру раскидать из домашней сети - кинетика адреса для клиентов wg-кинетик-сервера аналогичным способом.

@Le ecureuil Будет ли возможность штатно раздать ipv6-адреса клиентам сети кеенетик-а?

Link to comment
Share on other sites

  • 0
7 минут назад, avn сказал:

@Le ecureuil Будет ли возможность штатно раздать ipv6-адреса клиентам сети кеенетик-а?

Я запутался уже. Поясните, пожалуйста, а разве это всё  ( allow-ips в ipv6-формате и прочее) будет не в  keen os 3.10 ? 

  • Upvote 1
Link to comment
Share on other sites

  • 0
2 минуты назад, krass сказал:

Я запутался уже. Поясните, пожалуйста, а разве это всё  ( allow-ips в ipv6-формате и прочее) будет не в  keen os 3.10 ? 

Я вообще рассчитываю на версии 3.8.4.5(6)/3.9, что бы задавать allow-ips в ipv6 формате через cli. Смущают фразы "уже появилась опять" и "можно задавать"

  • Upvote 1
Link to comment
Share on other sites

  • 0

"Появилась опять" - это из-за того, что раньше можно было задавать на Wireguard ipv6 адреса в cli, но мы такое не тестировали и потому это было "случайной фичей". Потом в 3.08 и дальше мы активно занялись IPv6 внутри и все неподдерживаемые и непроверенные варианты были запрещены. Теперь в будущей 4.0 специально заново добавлена поддержка IPv6 и протестирована, что "возвращает" возможность задания адресов, но уже в официальном варианте.

3.09 уже на стадии "на днях стабильная версия", потому там никаких нововведений уже не ожидается.

  • Thanks 3
Link to comment
Share on other sites

  • 0
В 17.11.2022 в 23:42, krass сказал:

В будущей keen os 4.0 ? А 3.х уйдет в небытие , так? :?:

Судя по тому, что уже тестируется 4.0 alfa 5 и в списке есть, например, интересующая меня Ultra II надежда есть!

Link to comment
Share on other sites

  • 0
В 29.06.2022 в 14:00, avn сказал:

Добрый день!

Может кому-то пригодится выборочная маршрутизация через Wireguard по ipv6.

На версии 3.7.4 ipv6 адрес на интерфейсе nwg можно было задать командой:

interface Wireguard2 ipv6 address fd01:5ca1:ab1e:891f:c4fc:4a2e:e64d:503d

На версии 3.8.2 эта команда не работает. Поэтому был модифицирован скрипт /opt/etc/ndm/ifstatechanged.d/000-fix-Wireguard2.sh

#!/bin/sh

[ "$1" == "hook" ] || exit 0
[ "$change" == "link" ] || exit 0
[ "$id" == "Wireguard2" ] || exit 0

ip6t() {
	if ! ip6tables -C "$@" &>/dev/null; then
		ip6tables -A "$@"
	fi
}

case ${id}-${change}-${connected}-${link}-${up} in
	${id}-link-yes-up-up)
	cat << EOF >/tmp/fix-${id}.conf
[Interface]
PrivateKey = MMVM2wVNQqUyug1cBY=
[Peer]
PublicKey = bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = engage.cloudflareclient.com:2408
EOF

		ip -6 addr add fd01:5ca1:ab1e:891f:c4fc:4a2e:e64d:503d/128 dev nwg2
		wg setconf nwg2 /tmp/fix-${id}.conf
		ip6t POSTROUTING -t nat -o nwg2 -j MASQUERADE
	;;
esac

exit 0

Сам тест:

wg show nwg2
ifconfig nwg2

ip -6 rule add from all lookup 123 priority 1123
ip -6 route add table 123 2a03:1b20:1:f410::ff1 dev nwg2

ip -6 rule
ip -6 route show table 123

traceroute6 2a03:1b20:1:f410::ff1

Результат:

~ # uname -a
Linux ZyAvenger 4.9-ndm-5 #0 SMP Tue Jun 21 16:39:31 2022 mips GNU/Linux
~ # wg show nwg2
interface: nwg2
  public key: JL+TtFAHd2heTNrACYj8tlkn9f4rrZi7auvuQRBkajY=
  private key: (hidden)
  listening port: 49203

peer: bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=
  endpoint: [2606:4700:d0::a29f:c001]:2408
  allowed ips: 0.0.0.0/0, ::/0
  latest handshake: 1 minute, 33 seconds ago
  transfer: 15.29 KiB received, 6.19 KiB sent
~ # ifconfig nwg2
nwg2      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:172.16.0.2  P-t-P:172.16.0.2  Mask:255.255.255.255
          inet6 addr: fd01:5ca1:ab1e:891f:c4fc:4a2e:e64d:503d/128 Scope:Global
          UP POINTOPOINT RUNNING NOARP  MTU:1280  Metric:1
          RX packets:52643 errors:0 dropped:53 overruns:0 frame:0
          TX packets:63283 errors:3 dropped:1 overruns:0 carrier:0
          collisions:0 txqueuelen:50
          RX bytes:14968865 (14.2 MiB)  TX bytes:8037372 (7.6 MiB)

~ # ip -6 rule
0:      from all lookup local
233:    from all fwmark 0x2333 lookup 233
1123:   from all lookup 123
1778:   from all fwmark 0xd1001 lookup 1001
32766:  from all lookup main
~ # ip -6 route show table 123
2a03:1b20:1:f410::ff1 dev nwg2  metric 1024  pref medium
~ # traceroute6 2a03:1b20:1:f410::ff1
traceroute to 2a03:1b20:1:f410::ff1 (2a03:1b20:1:f410::ff1) from fd01:5ca1:ab1e:891f:c4fc:4a2e:e64d:503d, port 33434, from port 45415, 30 hops max, 60 bytes packets
 1  fd01:5ca1:ab1e::1 (fd01:5ca1:ab1e::1)  10.845 ms  10.961 ms  10.997 ms
 2  2400:cb00:87:1000::1 (2400:cb00:87:1000::1)  11.906 ms  17.869 ms  20.842 ms
 3  mow-b4-link.ip.twelve99.net (2001:2000:3080:539::1)  11.994 ms  11.797 ms  11.299 ms
 4  mow-b8-v6.ip.twelve99.net (2001:2034:0:220::1)  11.474 ms  11.974 ms  12.476 ms
 5  kbn-bb2-v6.ip.twelve99.net (2001:2034:1:78::1)  40.321 ms  41.409 ms  72.470 ms
^C22% completed...

 

Здравствуйте.

Если подключение WG уже имеется в системе и нужно только повесить для него адрес, то можно параметры подключения из скрипта убрать?

Link to comment
Share on other sites

  • 0
В 29.06.2022 в 12:00, avn сказал:

Может кому-то пригодится ... через Wireguard по ipv6.

...

Спасибо, мил человек!!! Немного подправил и вуляля!

Может кому то тоже пригодится:

#!/bin/sh

WGIPV4="172.16.0.2"
WGFACE=$(ip addr|grep "inet $WGIPV4"|sed -En 's/.* nwg([[:digit:]]+)/\1/p')

[ "$1" == "hook" ] || exit 0
[ "$change" == "link" ] || exit 0
[ "$id" == "Wireguard$WGFACE" ] || exit 0

ip6t() {
    if ! ip6tables -C "$@" &>/dev/null; then
        ip6tables -A "$@"
    fi
}

case ${id}-${change}-${connected}-${link}-${up} in
    ${id}-link-yes-up-up)
    TABLE=$(ip -4 rule|grep "from $WGIPV4"|sed -En 's/.*lookup ([[:digit:]]+).*/\1/p')
    if [ "$TABLE" != "" ]; then
        /opt/bin/wg set nwg$WGFACE peer bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo= allowed-ips 0.0.0.0/0,::/0
        ip -6 addr add 2606:4700:####:####:####:####:####:####/128 dev nwg$WGFACE
        ip6t POSTROUTING -t nat -o nwg$WGFACE -j MASQUERADE
        ip -6 rule del pref 10$TABLE
        ip -6 rule add from 2606:4700:####:####:####:####:####:#### lookup $TABLE pref 10$TABLE
        ip -6 route add 2606:4700:####:####:####:####:####:####/128 dev nwg$WGFACE table $TABLE
        ip -6 route add default dev nwg$WGFACE table $TABLE
    fi
    ;;
esac

exit 0

Link to comment
Share on other sites

  • 0

У меня ничего не появилось Wireguard не работает через IPv6, идёт утечка DNS также. Через официальные клиенты Wireguard  работает IPv6 и утечки DNS нет, независимо на какую OS ставишь клиент. Поэтому IPv6 пришлось отключить, с утечкой DNS смириться. Там где эти вопросы критичны, использую официальные клиенты wireguard. По другому никак...

Edited by MiDvaler
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...