{{tag>networking ipv6 bridge}}
====== Set up IPv6 on host and VM ======
Prerequisites:
- host with ipv6 subnet assigned
- kvm/qemu virtal machines
===== Host machine =====
Identify the interface to which to assign the ipv6. In case you are using a bridge you need to use the bridge interface.
Set up bridge (install ''bridge-utils'' package)
brctl addbr br0
ip link set up dev br0
Add physical interface to bridge, here eth2 (adjust as necessary):
brctl addif br0 eth2
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.d05099fd8909 no eth2
vnet0
vnet1
vnet2
vnet3
vnet4
vnet5
vnet6
Above we see the physical interface is eth2 and rest are vnets from created VMs from before.
Now add ipv6 to bridge interface.
If you just want to use the v6 address on the interface itself you have to remove it from the bridge.
We add the IP:
ip -6 addr add 2607:5300:203:9cc9::/64 dev br0
This is subnet so you can choose an ip like 2607:5300:203:9cc9::1234. In this example the above is equal to ''2607:5300:203:9cc9::0'' IP address.
Add route to the v6 gateway itself (get it from the server provider)
ip -6 route add 2607:5300:0203:9cff:00ff:00ff:00ff:00ff dev br0
then add default route:
ip -6 route add default via 2607:5300:0203:9cff:00ff:00ff:00ff:00ff
Check
# ip -6 r
::1 dev lo proto kernel metric 256 pref medium
2607:5300:203:9cc9::/64 dev br0 proto kernel metric 256 pref medium
2607:5300:203:9cff:ff:ff:ff:ff dev br0 metric 1024 pref medium
fe80::/64 dev eth2 proto kernel metric 256 pref medium
fe80::/64 dev vnet0 proto kernel metric 256 pref medium
fe80::/64 dev br0 proto kernel metric 256 pref medium
fe80::/64 dev vnet1 proto kernel metric 256 pref medium
fe80::/64 dev vnet2 proto kernel metric 256 pref medium
fe80::/64 dev vnet3 proto kernel metric 256 pref medium
fe80::/64 dev vnet4 proto kernel metric 256 pref medium
fe80::/64 dev vnet5 proto kernel metric 256 pref medium
fe80::/64 dev vnet6 proto kernel metric 256 pref medium
default via 2607:5300:203:9cff:ff:ff:ff:ff dev br0 metric 1024 pref medium
===== Inside of VM =====
Assign an ip from the IPv6 subnet of the host. We chose ..:178 here:
# ip -6 addr add 2607:5300:203:9cc9::178/64 dev eth0
# 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: eth0: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 02:00:00:a0:b6:a8 brd ff:ff:ff:ff:ff:ff
altname enp1s0
inet 51.161.64.178/32 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 2607:5300:203:9cc9::178/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::ff:fea0:b6a8/64 scope link
valid_lft forever preferred_lft forever
Now add default route. "via" is the IPv6 of the host interface br0.
# ip -6 route add default via 2607:5300:203:9cc9::0
# ping6 2001:4860:4860::8888
PING 2001:4860:4860::8888(2001:4860:4860::8888) 56 data bytes
64 bytes from 2001:4860:4860::8888: icmp_seq=2 ttl=113 time=1.24 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=3 ttl=113 time=1.25 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=4 ttl=113 time=1.25 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=5 ttl=113 time=1.25 ms
If any of the pings aren't working make sure to check if the firewall is blocking and you have ipv6 forwarding enabled on host.
====== Tested on ======
* AlmaLinux 9
* KVM/Qemu VMs
====== See also ======
* [[add_additional_ip_address_interface|Add additional ip address on interface]]
====== References ======
* https://access.redhat.com/sites/default/files/attachments/rh_ip_command_cheatsheet_1214_jcs_print.pdf
* [[https://tools.keycdn.com/ipv6-ping|Ping6 test website]]