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 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 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, 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
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, 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 the Python HTTP Server
If you are coding in python and you want your HTTP server to listen on IPv6, you can inherit from HTTPServer and set the address family to AF_INET6 as follows:
class HTTPServerV6(HTTPServer):
address_family = socket.AF_INET6
For more details on how to use the HTTPServer in general, checkout this stackoverflow post.
Thanks to cvmiller for this hint!
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 which describes how to configure IPv6 on Red Hat. Thanks for the pointer to IndieLab!
Other applications
If you know about other applications or want to enhance one of our configuration, we invite you to join the IPv6 chat or write to us on Twitter.