{"id":593,"date":"2026-07-08T13:49:44","date_gmt":"2026-07-08T13:49:44","guid":{"rendered":"https:\/\/virtualserversvps.com\/blog\/?p=593"},"modified":"2026-08-18T22:14:49","modified_gmt":"2026-08-18T22:14:49","slug":"vps-ipv6-configuration-enable-optimize-server","status":"publish","type":"post","link":"https:\/\/virtualserversvps.com\/blog\/vps-ipv6-configuration-enable-optimize-server\/","title":{"rendered":"IPv6 on a VPS: A Checklist That Gets You Online on the First Try"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Your provider handed you an IPv6 address the day you ordered the VPS, and you probably ignored it. Then the first time you actually need it \u2014 an IPv6-only client, a second IP for mail, or a route around a broken IPv4 peering \u2014 you spend an afternoon fighting <code>Network is unreachable<\/code>. This is the checklist that gets IPv6 working on a Linux VPS on the first try, plus the three failure modes that break most setups.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Write down what your provider actually assigned<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Open your provider&#8217;s control panel and note the exact IPv6 address, the prefix length, and the gateway. The three common patterns on cloud VPSes are:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>A single \/64 routed to you<\/strong> \u2014 the gateway is your provider&#8217;s router, usually a link-local address like <code>fe80::1<\/code> on the same interface.<\/li>\n<li><strong>A static address + gateway pair<\/strong> \u2014 the gateway is a global address in the same \/64 or a nearby prefix.<\/li>\n<li><strong>SLAAC\/DHCPv6<\/strong> \u2014 more common on dedicated servers than on cloud VPSes; check whether your image supports it.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Some providers don&#8217;t enable IPv6 by default at all. If the panel shows no address, check the docs \u2014 it may be one toggle in the network settings, and it usually requires a reboot or a reconfig to appear on the interface.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Make sure the guest hasn&#8217;t disabled IPv6<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A surprising number of cloud images ship with IPv6 disabled in <code>sysctl<\/code>, often via a file in <code>\/etc\/sysctl.d\/<\/code>. Check before you configure anything:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sysctl net.ipv6.conf.all.disable_ipv6 net.ipv6.conf.default.disable_ipv6\n# expected: net.ipv6.conf.all.disable_ipv6 = 0\n#           net.ipv6.conf.default.disable_ipv6 = 0<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If either prints <code>1<\/code>, find the offending file (usually <code>\/etc\/sysctl.d\/99-disable-ipv6.conf<\/code>), delete or edit it, then apply:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo sysctl -p\nip -6 addr show<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Configure the interface<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">On Ubuntu (netplan), a typical static IPv6 block looks like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>network:\n  version: 2\n  ethernets:\n    eth0:\n      dhcp4: true\n      addresses:\n        - 2001:db8:1000::2\/64\n      routes:\n        - to: default\n          via: fe80::1\n          scope: link<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then apply and verify:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo netplan apply\nip -6 addr show eth0\nip -6 route show default<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">On Debian-style systems using <code>\/etc\/network\/interfaces<\/code>, the equivalent is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>iface eth0 inet6 static\n    address 2001:db8:1000::2\/64\n    gateway fe80::1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The gateway being link-local (<code>fe80::1<\/code>) is the most common source of confusion \u2014 on most clouds the IPv6 default route goes through a link-local next hop, and netplan needs <code>scope: link<\/code> for that to work.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Test from the box<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>ping -6 2001:4860:4860::8888        # Google DNS over IPv6\ncurl -6 -s https:\/\/ifconfig.co       # shows your IPv6 address if the route works<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If ping works but curl fails, the problem is DNS (no AAAA record yet) or outbound traffic filtering. If even ping fails, go to the failure table below.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The three failure modes that break 80% of setups<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Failure<\/th><th>Symptom<\/th><th>Fix<\/th><\/tr><\/thead><tbody><tr><td>No default route<\/td><td><code>Network is unreachable<\/code> on any <code>ping -6<\/code><\/td><td>Add the route via the link-local gateway as in Step 3<\/td><\/tr><tr><td>Firewall drops ICMPv6<\/td><td>Address assigned but nothing responds; neighbors never resolve<\/td><td>Allow the ICMPv6 types below in ufw\/nftables<\/td><\/tr><tr><td>Services bound to IPv4 only<\/td><td><code>curl -6<\/code> works but port 80\/22 don&#8217;t answer<\/td><td>Set <code>ListenAddress ::<\/code> in sshd, <code>listen [::]:80<\/code> in nginx<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The firewall one is the sneakiest: IPv6 neighbor discovery relies on ICMPv6, and a drop-all firewall without ICMPv6 exceptions will silently break IPv6 even though the address looks configured. An nftables rule set that accepts the required types:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>table inet filter {\n  chain input {\n    type filter hook input priority filter; policy drop;\n    icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, echo-request, nd-neighbor-solicit, nd-neighbor-advert, nd-router-solicit, nd-router-advert } accept\n  }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">With ufw, <code>sudo ufw allow to ::\/0 proto icmpv6<\/code> covers the same ground, and recent ufw versions already include sane ICMPv6 defaults. For sshd, make sure it listens on IPv6 too:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \/etc\/ssh\/sshd_config\nListenAddress ::<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Add the AAAA record<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">IPv6 on the server is only half the job. Add an AAAA record for your hostname pointing at the new address, then verify resolution from outside:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dig AAAA +short example.com @1.1.1.1\n# should print your IPv6 address once DNS has propagated<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A free external check like test-ipv6.com will confirm both the server and the DNS side in one pass.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">When it still doesn&#8217;t work<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If the address is configured, the route is up, and the firewall is open but nothing responds, the problem is upstream: some providers don&#8217;t route the prefix they assign until you open a ticket, and a few charge extra for usable IPv6. Before you buy anything, check what the provider actually includes \u2014 native IPv6 support is one of the details we track in <a href=\"https:\/\/virtualserversvps.com\/#providers\">our VPS comparison table<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Enable IPv6 once, keep it on, and verify it quarterly. Even if your users are all IPv4 today, mail deliverability, API clients, and an increasing share of mobile networks already prefer the v6 path \u2014 and having it working costs you nothing.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Your provider handed you an IPv6 address the day you ordered the VPS, and you probably ignored it. Then the first time you actually need it \u2014 an IPv6-only client,&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":3,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-593","post","type-post","status-publish","format-standard","hentry","category-vps-guides-tutorials"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>IPv6 on a VPS: A Checklist That Gets You Online on the First Try - Virtual Servers VPS Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/virtualserversvps.com\/blog\/vps-ipv6-configuration-enable-optimize-server\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"IPv6 on a VPS: A Checklist That Gets You Online on the First Try\" \/>\n<meta property=\"og:description\" content=\"IPv6 on a VPS: A Checklist That Gets You Online on the First Try\" \/>\n<meta property=\"og:url\" content=\"https:\/\/virtualserversvps.com\/blog\/vps-ipv6-configuration-enable-optimize-server\/\" \/>\n<meta property=\"og:site_name\" content=\"Virtual Servers VPS Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-08T13:49:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-18T22:14:49+00:00\" \/>\n<meta name=\"author\" content=\"Virtual-Servers-Vps-Editor\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Virtual-Servers-Vps-Editor\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/vps-ipv6-configuration-enable-optimize-server\/\",\"url\":\"https:\/\/virtualserversvps.com\/blog\/vps-ipv6-configuration-enable-optimize-server\/\",\"name\":\"IPv6 on a VPS: A Checklist That Gets You Online on the First Try - Virtual Servers VPS Blog\",\"isPartOf\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#website\"},\"datePublished\":\"2026-07-08T13:49:44+00:00\",\"dateModified\":\"2026-08-18T22:14:49+00:00\",\"author\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0\"},\"breadcrumb\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/vps-ipv6-configuration-enable-optimize-server\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/virtualserversvps.com\/blog\/vps-ipv6-configuration-enable-optimize-server\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/vps-ipv6-configuration-enable-optimize-server\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/virtualserversvps.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"IPv6 on a VPS: A Checklist That Gets You Online on the First Try\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#website\",\"url\":\"https:\/\/virtualserversvps.com\/blog\/\",\"name\":\"Virtual Servers VPS Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/virtualserversvps.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0\",\"name\":\"Virtual-Servers-Vps-Editor\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g\",\"caption\":\"Virtual-Servers-Vps-Editor\"},\"sameAs\":[\"https:\/\/virtualserversvps.com\/blog\"],\"url\":\"https:\/\/virtualserversvps.com\/blog\/author\/virtualserversvps\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"IPv6 on a VPS: A Checklist That Gets You Online on the First Try - Virtual Servers VPS Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/virtualserversvps.com\/blog\/vps-ipv6-configuration-enable-optimize-server\/","og_locale":"en_US","og_type":"article","og_title":"IPv6 on a VPS: A Checklist That Gets You Online on the First Try","og_description":"IPv6 on a VPS: A Checklist That Gets You Online on the First Try","og_url":"https:\/\/virtualserversvps.com\/blog\/vps-ipv6-configuration-enable-optimize-server\/","og_site_name":"Virtual Servers VPS Blog","article_published_time":"2026-07-08T13:49:44+00:00","article_modified_time":"2026-08-18T22:14:49+00:00","author":"Virtual-Servers-Vps-Editor","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Virtual-Servers-Vps-Editor","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/virtualserversvps.com\/blog\/vps-ipv6-configuration-enable-optimize-server\/","url":"https:\/\/virtualserversvps.com\/blog\/vps-ipv6-configuration-enable-optimize-server\/","name":"IPv6 on a VPS: A Checklist That Gets You Online on the First Try - Virtual Servers VPS Blog","isPartOf":{"@id":"https:\/\/virtualserversvps.com\/blog\/#website"},"datePublished":"2026-07-08T13:49:44+00:00","dateModified":"2026-08-18T22:14:49+00:00","author":{"@id":"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0"},"breadcrumb":{"@id":"https:\/\/virtualserversvps.com\/blog\/vps-ipv6-configuration-enable-optimize-server\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/virtualserversvps.com\/blog\/vps-ipv6-configuration-enable-optimize-server\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/virtualserversvps.com\/blog\/vps-ipv6-configuration-enable-optimize-server\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/virtualserversvps.com\/blog\/"},{"@type":"ListItem","position":2,"name":"IPv6 on a VPS: A Checklist That Gets You Online on the First Try"}]},{"@type":"WebSite","@id":"https:\/\/virtualserversvps.com\/blog\/#website","url":"https:\/\/virtualserversvps.com\/blog\/","name":"Virtual Servers VPS Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/virtualserversvps.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0","name":"Virtual-Servers-Vps-Editor","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g","caption":"Virtual-Servers-Vps-Editor"},"sameAs":["https:\/\/virtualserversvps.com\/blog"],"url":"https:\/\/virtualserversvps.com\/blog\/author\/virtualserversvps\/"}]}},"_links":{"self":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/593","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/comments?post=593"}],"version-history":[{"count":3,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/593\/revisions"}],"predecessor-version":[{"id":913,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/593\/revisions\/913"}],"wp:attachment":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/media?parent=593"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/categories?post=593"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/tags?post=593"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}