ungleich-staticcms/content/u/blog/how-to-enable-ipv6-in-applications/contents.lr
2019-09-26 19:04:37 +02:00

158 lines
3.5 KiB
Markdown

title: How to enable IPv6 in applications
---
pub_date: 2019-09-26
---
author: Team ungleich
---
twitter_handle: ungleich
---
abstract:
New to IPv6? Wondering how to enable IPv6 in your favorite
application? Then this blog entry is for you.
---
body:
In this blog article you'll find some hints on how to enable IPv6 for
various applications.
## How to enable IPv6 in nginx
The web server [nginx](https://nginx.org/) by default only listens to IPv4 if you use
the standard `listen *:80;` directive. To enable IPv6, use
`listen [::]:80;`. So for a dual stack server, your configuration
could look as follows:
```
server {
listen *:80;
listen [::]:80;
...
}
```
## How to enable IPv6 in HAProxy
There are various interesting configuration options in
[HAProxy](https://www.haproxy.org/) related
to IPv6. Let's have a look at each of them!
To enable IPv6 transport for the local logging, use `log [::1]` in the
global section:
```
global
log [::1] local2
...
```
If you want a frontend to listen to either IPv6 or IPv4 only, you can
use the `ipv6@` prefix as follows:
```
# IPv6 http frontend
frontend httpipv6
bind ipv6@:80
mode http
# IPv4 http frontend
frontend httpipv4
bind ipv4@:80
mode http
...
```
If you want to connect to the backends only via a specific protocol,
we can use the prefix syntax there as well:
```
backend httpipv4
mode http
use-server ungleich.ch if { hdr(host) -i ungleich.ch }
server ungleich.ch ipv6@ungleich.ch
...
```
To proxy IPv6 requests to IPv4 only [twitter](https://twitter.com), you could
use the following configuration:
```
# ipv6 https
frontend httpsipv6
bind ipv6@:443
mode tcp
option tcplog
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
default_backend httpsipv6
backend httpsipv6
mode tcp
use-server twitter.com if { req_ssl_sni -i twitter.com }
server twitter.com ipv4@twitter.com
```
## How to enable IPv6 in Lektor
The static CMS [lektor](https://www.getlektor.com/)
by default serves on IPv4. To serve on IPv6
localhost use `-h ::1`, to be globally reachable use `-h ::`.
```
# Serve on IPv6 localhost
% lektor serve -h ::1
# Serve on IPv6 (globally reachable)
% lektor serve -h ::
```
## How to use IPv6 in keepalived
[Keepalived](https://keepalived.org/), the VRRP daemon for Linux,
supports IPv6 for a while. However newer versions (wikipedia: citation
needed) of keepalived require to have two different instances, if you
are running dual stack VRRP messages. So your keepalived.conf for use
with IPv6 might look as follows:
```
vrrp_instance router_internal {
state BACKUP
interface bond0.10
virtual_router_id 1
virtual_ipaddress {
2a0a:e5c0:2:0::7/64 dev bond0.10
}
}
vrrp_instance router_internal_ipv4 {
state BACKUP
interface bond0.10
virtual_router_id 2
virtual_ipaddress {
10.3.0.7/22 dev bond0.10
}
}
```
## How to enable IPv6 in Redhat Linux
While Red Hat is not specifically an application, we still wanted
to list [the article from Valentin
Bajrami](https://www.redhat.com/sysadmin/configuring-ipv6-rhel-7-8)
which describes how to configure IPv6 on Red Hat. Thanks for the
pointer to [IndieLab](https://twitter.com/omnidelic)!
## Other applications
If you know about other applications or want to enhance one of our
configuration, we invite you to join the [IPv6
chat](https://IPv6.chat) or [write to us on
Twitter](https://twitter.com/ungleich).