Enable IPv6

From MythTV Official Wiki
Revision as of 14:58, 14 February 2012 by Llib (talk | contribs) (Reworked based on latest 0.25pre fixes)

Jump to: navigation, search

0.25pre [37385ba]cgitgithub allows users the option of connecting to mythbackend via IPv6 for file transfers.

This Wiki shows how to activate IPv6. This is part of a significant change in the way MythTV binds to sockets.

IPv6 Configuration

Interfaces typically have multiple IPv6 addresses. For help picking the right one, see #Which IPv6 address should be used?.

If IPv6 is known to be working, just complete the following. Otherwise, see #Prerequsites.

Stop all frontends and backends.

Using mythtv-setup on the master backend, go to the General page, enter the address of choice in the IPv6 address: field.

The field should look something like this.

IPv6 address: fd01:a:b:1::123

Note that some (non MythTV) programs require their IPv6 addresses enclosed in brackets ([]) or the addition of a trailing percent sign and Zone Index (e.g. %eth0.) Neither of these should be used with MythTV.

Use mythtv-setup to configure any slave backends with their own IPv6 addresses.

Restart the backend(s). Frontends will now perform file transfers (e.g. recording playback) via IPv6.

Which IPv6 address should be used?

The most likely choice is a Unique Local Address (ULA.) Use ULA's if all access to the backend will be within a LAN.

Note that even though ULAs are global addresses, no self respecting router will pass them out on the internet.

Use a search engine and look for: 'Unique Local Address generator' to find a site that will create ULAs correctly (for example.)

For details on constructing ULAs see RFC 4193.

MythTV must have a globally routeble IPv6 address (e.g. 2001:db8::1) configured only if it is necessary to run MythTV from a frontend/slave over the internet.

Site Local (fec0::/10) addresses were deprecated in 2004.

Host (::1) addresses are configured in MythTV automatically, but are not routable, use them for a stand alone system.

Since all Link Local addresses have the same prefix (fe80::/10), they require a Zone Index (e.g. %eth0) for routing and shouldn't be used. MythTV will automatically ignore these addresses.

To list currently assigned IPv6 addresses, type: ifconfig ethX | grep inet6

inet6 addr: fe80::222:22ff:fe22:2222/64 Scope:Link
inet6 addr: fd01:a:b:1::123/64 Scope:Global
inet6 addr: 2001:db8::123/64 Scope:Global

In the above, the middle address is probably the best choice. It is also probably one that must be assigned manually.

If the desired address doesn't exist, use the configuration tool provided with the host's distribution to add it.

Entries in /etc/hosts (DHCP, router etc.) are optional. The following is an example for one host:              masterbe.local    masterbe
fd01:a:b:1::123            masterbe.local    masterbe
2001:db8::123              masterbe.local    masterbe

Back to #IPv6 Configuration


Verify that IPv6 is active on each MythTV host.

If ssh, for example, is known to work, a simple test (run from the master backend) is:

for HOST in <list all frontend and slave backends here>
do  ssh -6 $HOST hostname

If the test works for all frontends and slave backends, IPv6 can be added to MythTV.

If the above fails, see the following section.

Back to #IPv6 Configuration

What if there's a problem

  • Make sure IPv6 hasn't been disabled either system wide or for the interface MythTV will use. Type:

sysctl -a | grep ipv6

net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
net.ipv6.conf.eth0.disable_ipv6 = 0
  • Some distributions keep these options in files under /etc/sysctl.d.
  • Be sure any firewalls have been adjusted to accept the IPv6 addresses being used.
  • MySQL connections are currently selected by the hostname information in config.xml and mysql.txt files. Unless a version of MySQL that supports IPv6 is being used, no changes are required.
  • If there are entries in /etc/hosts (etc.), for both IPv4 and IPv6 addresses that have the same hostname (which is perfectly legal,) make sure the host's preferences pick IPv4 first. /etc/gai.conf may exist and control this.

Back to #IPv6 Configuration

Tools and sample output

These examples are all from a host with mythbackend running and IPv6 configured. MySQL is running and using IPv4. Obviously, these tools can be run on frontends and slave backends.

Warning.png Warning: The output of some tools and in logfiles may expose IPv6 addresses. Some addresses contain a modified MAC address or globally addressable IPv6 addresses. When posting output to a public form, consider camouflaging them.

To make sure mythbackend and mysqld are listening for connections:

sudo netstat -pant | egrep '3306|6543'

When the backend is running, but no slave backends/frontends are connected, expect:

tcp   0  0  *      LISTEN      1198/mysqld     
tcp   0  0*      LISTEN      26961/mythbackend
tcp   0  0*      LISTEN      26961/mythbackend
tcp6  0  0  fd01:a:b:1::123:6543    :::*           LISTEN      26961/mythbackend
tcp6  0  0  ::1:6543                :::*           LISTEN      26961/mythbackend

With one frontend connected and playing a recording, expect:

tcp   0  0 *              LISTEN      1384/mysqld     
tcp   0  0*              LISTEN      26961/mythbackend
tcp   0  0*              LISTEN      26961/mythbackend
tcp   0  0    ESTABLISHED 1384/mysqld     
tcp   0  0    ESTABLISHED 1384/mysqld     
tcp   0  0    ESTABLISHED 26961/mythbackend
tcp   0  0    ESTABLISHED 26961/mythbackend
tcp   0  0    ESTABLISHED 1384/mysqld     
tcp6  0  0 fd01:a:b:1::123:6543   fd01:a:b:1::456:36345  ESTABLISHED 26961/mythbackend
tcp6  0  0 fd01:a:b:1::123:6543   fd01:a:b:1::456:36346  ESTABLISHED 26961/mythbackend
tcp6  0  0 ::1:6543               :::*                   LISTEN      26961/mythbackend

If installed, nmap may help diagnose the reason that a connection fails. For example, a firewall could be blocking access.

nmap -P0 -p 3306,6543 -6 --reason someHostName

The expected response is:

3306/tcp closed mysql   conn-refused
6543/tcp open   mythtv  syn-ack

Port 3306 fails in this test, as expected, because the MySQL version used doesn't support IPv6 (remove the -6 flag above and this will work.)

Additional information is available from both mythbackend and mythfrontend if the --loglevel debug is used.

mythbackend --verbose general --nodblog --quiet \
    --logpath /var/log/mythtv --loglevel debug

A running backend's loglevel can be changed by typing:

mythbackend --setloglevel debug --quiet --nodblog

Back to #IPv6 Configuration