blog: how to enable ipv6 in applications
This commit is contained in:
		
					parent
					
						
							
								9906c3e183
							
						
					
				
			
			
				commit
				
					
						bf03e1497d
					
				
			
		
					 1 changed files with 106 additions and 0 deletions
				
			
		
							
								
								
									
										106
									
								
								content/u/blog/how-to-enable-ipv6-in-applications/contents.lr
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								content/u/blog/how-to-enable-ipv6-in-applications/contents.lr
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,106 @@
 | 
				
			||||||
 | 
					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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 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;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 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](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
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 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).
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue