OS Archlinux, сеть поднимается через systemd-networkd, в интернет смотрит мост br0. Хостер выдал по стандарту: 1 адрес IP4 и подсеть IP6 - условно - 1234:5678:9999:aaaa::/64. У хостера роутер IPv6 RA, обслуживает адреса 1234:5678:999::/48.
Настроил Openvpn-server c интерфейсом tap0.
Конфиг сервера
port 65398
proto udp
dev tap0
server-bridge 192.168.15.1 255.255.255.0 192.168.15.200 192.168.15.254
ifconfig-ipv6 1234:5678:9999:aaaa:1::1 1234:5678:9999:aaaa:1::2
ifconfig-ipv6-pool 1234:5678:9999:aaaa:1::3/80
tls-version-min 1.2
ecdh-curve secp521r1
ca ca.crt
cert openvpn-server.crt
key openvpn-server.key
dh none
tls-auth ta.key 0
tls-cipher TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-ECDSA-WITH-CHACHA20-POLY1305-SHA256
cipher AES-256-GCM
crl-verify crl.pem
compress lz4-v2
keepalive 10 120
user openvpn
group openvpn
persist-key
persist-tun
log server6.log
verb 4
В юнит systemd для openvpn внесено добавление:
[Service]
ExecStartPost = /usr/bin/ip link set tap0 up promisc on
ExecStartPost = /usr/bin/ip link set dev tap0 master br0
Внутренние переадресации в sysctl.conf разрешены:
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
При такой конфигурации VPN в IPv6 работает, клиент подключается, получает из пула свой IP6 (может при желании и сам себе назначить какой хочет, хоть десяток) и через минуту-две анонс роутера RA хостера и он в сети, здесь проблем нет. Проблемы с IP4. Вот как выгладит сеть у клиента:
ahmed@fedora~> ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eno1: mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 80:e8:2c:b6:f5:88 brd ff:ff:ff:ff:ff:ff
3: wlp3s0: mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:e0:4c:81:92:02 brd ff:ff:ff:ff:ff:ff
inet 192.168.43.166/24 brd 192.168.43.255 scope global dynamic wlp3s0
valid_lft 2732sec preferred_lft 2732sec
inet6 fe80::2e0:4cff:fe81:9202/64 scope link
valid_lft forever preferred_lft forever
11: tap0: mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
link/ether 1a:90:f9:d1:50:d9 brd ff:ff:ff:ff:ff:ff
inet 192.168.15.200/24 brd 192.168.15.255 scope global tap0
valid_lft forever preferred_lft forever
inet6 1234:5678:9999:aaaa:1::3/80 scope global
valid_lft forever preferred_lft forever
inet6 fe80::c8ef:c1ff:fed2:a667/64 scope link
valid_lft forever preferred_lft forever
Маршрутов от сервера клиент никаких не получает, поэтому связь по IP4 идет через провайдера. Пробовал в конфиге сервера
push "redirect-gateway def1 bypass-dhcp"
при этом маршрут клиент получает, но тогда IP4 на компьютере полностью отваливается, остается только IPv6. При этом пинг не идет ни от сервера к клиенту, ни наоборот.
Игры с iptable POSTROUTING результата не дали. Пока что VPN работает как бы наполовину: по 4 протоколу трафик идет через провайдера, по 6 - через RA хостера.
Как заставить трафик IPv4 идти через VPN? Понимаю, что проще сделать через tun, но мне важен именно белый IP6 адрес, чтобы клиент смотрел "голым задом" в интернет :). Вопрос с IPv6 решен, но теперь совершенно непонятно как быть с IPv4. Где-то я делаю ошибку на фундаментальном уровне. Подскажите, пожалуйста, кто знает.