Close menu

IPv6 support

Introduction

The Internet Protocol version 6 (IPv6) is an improved version of the Internet Protocol (IP) that is used for almost all network communication.

IPv6 is supported starting with SQL/R version A.03.33.

IPv6 was developed by the Internet Engineering Task Force (IETF) to address, among others, the anticipated problem of IPv4 address exhaustion. IPv6 became a Draft Standard in December 1998, and became an Internet Standard in 2017 (RFC 8200).

The most visible difference to IPv4 is that internet addresses are using 128 bits (rather than 32 bits with IPv4) and use a different notation. IPv4 addresses use a "dottet decimal notation", for example "172.16.254.1". IPv6 uses a hex notation where colons separate each 16 bit groups and any zero sequences may be omitted, for example "2001:0dbb:ac10:fe01::".


Source: Wikipedia

As the colon separator in the IPv6 notation could be ambigous SQL/R requires any IPv6 IP address to be enclosed in square brackets. For example, the local address becomes [::1].

IPv6 may coexist with IPv4. The SQL/R server process may be configured to use a single IPv6 socket supporting both IPv4 and IPv6 connections or to use separate sockets for the two IP protocols. Please note that any IPv4 access limits specified in SQL/R also apply to mapped IPv4 connections using an IPv6 listening socket. By default SQL/R uses separate sockets for both IPv4 and IPv6 connections.

Another change introduced with SQL/R A.03.33 is that host names might resolve to multiple IP addresses which could be IPv4 or IPv6. SQL/R tries them in order (as defined by the operating system), silently ignoring any connection failures until a connection completes. When using host names in access filters, all addresses are relevant. Any IPv4 settings also apply for mapped IPv4 connections using IPv6 sockets.

SQL/R server

The SQL/R server may be configured to support IPv4 only, IPv6 (with implied IPv4 support), or separate IPv4 and IPv6 listening sockets. By default, separate IPv4 and IPv6 sockets are used.

See also: [config] Service and HttpService

The SQL/R server configuration supports address filters to restrict access and to enable encrypted communication. The address filters support both IPv4 and IPv6 addresses (enclosed in square brackets).
Since SQL/R A.03.33, host names may be specified in addition to IP addresses. If a host name resolves to multiple IP addresses all addresses are relevant. Any IPv4 filter also applies to mapped IPv4 connections using an IPv6 socket.

See also: [access] allow/deny, [encryption] on/off

ODBC driver, sqlrexec, Sqlr.DLL

An IPv6 address (enclosed in square brackets) may be used to specify the SQL/R server address. If a host name is specified resolving to multiple IP addresses, connections are tried in the order defined by the operating system, ignoring any connection failures until a connection succeeds.

Please note that the "localhost" default server covers both the IPv6 "localhost" [::1] as well as the IPv4 "localhost" 127.0.0.1. As IPv6 connections are typically preferred by the operating system an IPv6 connection is used if IPv6 is enabled.

Some operating systems may add a delay connecting to the SQL/R server if an IPv6 socket is not enabled, as it is always tried first and may imply a timeout. We have seen this on Windows. As a consequence, we recommend to always enable IPv6 sockets (this is the default). The workaround is to use an explicit IPv4 address 127.0.0.1 instead of relying on the default "localhost".