Jack-Sparr0w
Senior Member
module-config: "respip validator iterator" # v1.08 add 'respip' for rpz feature @juched
access-control: 0.0.0.0/0 refuse
access-control: 127.0.0.0/8 allow
access-control: 10.0.0.0/8 allow
access-control: 172.16.0.0/12 allow # v1.10 Martineau Fix CIDR 16->12
access-control: 192.168.0.0/16 allow # v1.10 @dave14305 Fix CIDR 24->16
access-control: 103.86.96.0/16 allow
access-control: 103.86.99.0/16 allow
# RFC1918 private IP address - Protects against DNS Rebinding
private-address: 127.0.0.0/8
private-address: 169.254.0.0/16
private-address: 10.0.0.0/8
private-address: 172.16.0.0/12
private-address: 192.168.0.0/16
private-address: fd00::/8 # v1.11 Martineau
private-address: fe80::/10 # v1.11 Martineau
dns64-ignore-aaaa: ".*.*"
dns64-ignore-aaaa: "*"
dns64-ignore-aaaa: *.
do-not-query-address: ::/0
do-not-query-address: ::1
do-not-query-address: ::0/0
do-not-query-address: fe80::/10
do-not-query-address: fd00::/8
do-not-query-address: ::0
do-not-query-address: ::
do-ip4: yes
do-udp: yes
do-tcp: yes
prefer-ip4: yes
prefer-ip6: no
do-nat64: no
dns64-synthall: no
local-zone: "ipv6.microsoft.com" refuse
local-zone: "teredo.reality" refuse
local-zone: "xbox-ipv6.xboxlive.com" refuse
local-zone: "teredo.xboxlive.com" refuse
local-zone: "ipv6.msftncsi.com" refuse
local-zone: "teredo.ipv6.microsoft.com" refuse
local-zone: "ipv6.msftconnecttest.com" refuse
local-zone: "win1910.ipv6.microsoft.com" refuse
local-zone: "win10.ipv6.microsoft.com" refuse
local-zone: "win8.ipv6.microsoft.com" refuse
local-zone: "win7.ipv6.microsoft.com" refuse
local-zone: "xbox.ipv6.microsoft.com" refuse
local-zone: "ipv6.litwareinc.com" refuse
local-zone: "teredo.autoconfig.ipv6.microsoft.com" refuse
local-zone: "isatest.public.amers.ham1.ipv6.microsoft.com" refuse
local-zone: "6to4.ipv6.microsoft.com" refuse
local-zone: "ip6.arpa" refuse
local-zone: "vrchatapi.onrender.com" refuse
local-zone: "vrcx.live" refuse
local-zone: "gigdi.net" refuse
local-zone: "vrchatip.com" refuse
local-zone: "vrchatapi.pages.dev" refuse
local-zone: "sync.top" refuse
local-zone: "umbrellacorp.vrchat.cloud" refuse
local-zone: "onrender.com" refuse
local-zone: "pages.dev" refuse
local-zone: "replit.co" refuse
local-zone: "replit.dev" refuse
local-zone: "workers.dev" refuse
local-zone: "slothytech.com" refuse
#########################################
# integration IPV6
#
do-ip6: no
private-address: ::/0 # v1.11 Martineau Enhance 'do-ip6: no' i.e. explicitly drop ALL IPv6 responses
# do-ip6: no
# edns-buffer-size: 1200 # v1.11 as per @Linux_Chemist https://www.snbforums.com/threads/u...aller-utility-for-unbound-recursive-dns-serve>
# access-control: ::/0 refuse
# access-control: ::0/0 refuse
# access-control: ::1 refuse
# access-control: fd00::/8 refuse
# access-control: fe80::/10 refuse
# access-control: ::0 refuse
# private-address: fd00::/8
# private-address: fe80::/10
#########################################
tls-cert-bundle: "/etc/ssl/certs/ca-certificates.crt" # v1.01 as per @dave14305 minimal config
# no threads and no memory slabs for threads
num-threads: 4
msg-cache-slabs: 4
rrset-cache-slabs: 4
infra-cache-slabs: 4
key-cache-slabs: 4
ip-ratelimit-slabs: 4
ratelimit-slabs: 4
# tiny memory cache
extended-statistics: yes # v1.06 Martineau for @juched GUI TAB
key-cache-size: 50m
msg-cache-size: 50m
rrset-cache-size: 100m
ip-ratelimit-size: 16m
ratelimit-size: 16m
http-query-buffer-size: 16m
http-response-buffer-size: 16m
stream-wait-size: 50m
quic-size: 16m
cache-max-ttl: 3600 # v1.08 Martineau
cache-min-ttl: 0 # v1.08 Martineau
# prefetch
prefetch: yes
prefetch-key: yes
minimal-responses: yes
serve-expired: yes
serve-expired-ttl: 3600 # v1.12 as per @juched
serve-expired-ttl-reset: yes # v1.13 as per @jumpsmm7 Set the TTL of expired records to the serve-expired-ttl value after a failed attempt to retrieve the record from upstream.
incoming-num-tcp: 950
outgoing-num-tcp: 200
num-queries-per-thread: 100
outgoing-range: 200
jostle-timeout: 5000
ip-ratelimit: 2000 # v1.04 as per @L&LD as it impacts ipleak.net?
edns-buffer-size: 1100 # v1.01 as per @dave14305 minimal config
max-udp-size: 1024 # v1.13 as per @jumpsmm7 mitigate DDOS threats when using dnssec, reduce potential for fragmentation.
#outgoing-port-avoid: 0-32767 # v1.13 as per @jumpsmm7 avoid grabbing udp ports commonly used / only for users with UDP port availability problems
#outgoing-port-permit: 32768-65535 # v1.13 as per @jumpsmm7 ports to permit / Not necessary if port-avoid is not used. limits port randomization.
sock-queue-timeout: 5
infra-cache-numhosts: 40000
discard-timeout: 6334
unwanted-reply-threshold: 5000000
infra-keep-probing: no
infra-host-ttl: 900
infra-lame-ttl: 900
so-reuseport: yes
tcp-reuse-timeout: 90000
msg-buffer-size: 65552
max-global-quota: 300
delay-close: 60000
http-max-streams: 150
tls-use-sni: no
pad-responses: yes
pad-responses-block-size: 468
pad-queries: yes
pad-queries-block-size: 128
val-bogus-ttl: 90
wait-limit-cookie: 20000
wait-limit: 2000
infra-cache-min-rtt: 60
infra-cache-max-rtt: 180000
tcp-idle-timeout: 45000
max-reuse-tcp-queries: 300
tcp-auth-query-timeout: 6000
unknown-server-time-limit: 6000
neg-cache-size: 16m
val-sig-skew-min: 3600
val-sig-skew-max: 86400
cache-min-negative-ttl: 0
cache-max-negative-ttl: 3600
serve-expired-client-timeout: 6000
iter-scrub-ns: 20
iter-scrub-cname: 11
max-sent-count: 32
answer-cookie: yes
target-fetch-policy: "0 0 0 0 0 0 0 0 0 0 0 0"
ip-ratelimit-cookie: 20000
val-max-restart: 5
val-nsec3-keysize-iterations: "1024 150 2048 150 4096 150"
serve-expired-reply-ttl: 45
outbound-msg-retry: 5
serve-original-ttl: yes
max-query-restarts: 11
ip-freebind: yes
ip-ratelimit-factor: 10
ratelimit-factor: 10
udp-connect: yes
tcp-mss: 1000
outgoing-tcp-mss: 900
edns-tcp-keepalive: yes
edns-tcp-keepalive-timeout: 180000
tls-ciphers: "ECDHE-RSA-WITH-AES256-GCM-SHA384"
tls-ciphersuites: "TLS_AES_256_GCM_SHA384"
ede: yes
ede-serve-expired: yes
ratelimit: 2000
fast-server-permil: 900
fast-server-num: 3
# Ensure kernel buffer is large enough to not lose messages in traffic spikes
#so-rcvbuf: 2m # v1.05 Martineau see DEFAULT /proc/sys/net/core/rmem_default
#so-sndbuf: 2m
#########################################
# Options for integration with TCP/TLS Stubby
# udp-upstream-without-downstream: no
#########################################
# gentle on recursion
hide-identity: yes
hide-version: yes
do-not-query-localhost: yes
qname-minimisation: yes
harden-glue: yes
harden-below-nxdomain: yes
rrset-roundrobin: yes
aggressive-nsec: yes
deny-any: yes
use-caps-for-id: no
harden-referral-path: no
harden-algo-downgrade: yes
harden-large-queries: no
harden-short-bufsize: yes
val-clean-additional: yes
harden-dnssec-stripped: no
qname-minimisation-strict: no
harden-unverified-glue: no
hide-http-user-agent: no
harden-unknown-additional: yes
# Self jail Unbound with user "nobody" to /var/lib/unbound
username: "nobody"
directory: "/opt/var/lib/unbound"
chroot: "/opt/var/lib/unbound"
# The pid file
pidfile: "/opt/var/run/unbound.pid"
# ROOT Server's
root-hints: "/opt/var/lib/unbound/root.hints"
# DNSSEC
auto-trust-anchor-file: "/opt/var/lib/unbound/root.key"
auth-zone:
name: "."
url: "https://www.internic.net/domain/root.zone"
fallback-enabled: no
for-downstream: no
for-upstream: yes
zonefile: root.zone
(fixes vpn ping 60 and ping restart 180 when VPN is binded) (infra-cache-max-rtt: 180000)
surgical precision.
Lowered cache values as they were set to high in my config
unbound.docs.nlnetlabs.nl
this is official guide if you have any questions
Copy and paste if you like the setup (1 gig ram 4 core router setup)
remote-cert-tls server
remote-random
nobind
resolv-retry infinite
persist-key
persist-tun
auth-nocache
tls-version-min 1.2
tls-version-max 1.3
tls-ciphersuites TLS_AES_256_GCM_SHA384
tls-cert-profile preferred
data-ciphers AES-256-GCM
tls-groups X25519
verify-x509-name CN=ca1304.nordvpn.com
reneg-sec 3600
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
ping 60
ping-restart 180
ping-timer-rem
proto udp4
tls-cipher TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384
pull
pull-filter ignore "ifconfig-ipv6"
pull-filter ignore "route-ipv6"
pull-filter ignore "redirect-gateway ipv6"
pull-filter ignore "dhcp-option DNS"
pull-filter ignore "dhcp-option DNS6"
pull-filter ignore "block-outside-dns"
block-ipv6
mute-replay-warnings
#log /tmp/vpn.log
access-control: 0.0.0.0/0 refuse
access-control: 127.0.0.0/8 allow
access-control: 10.0.0.0/8 allow
access-control: 172.16.0.0/12 allow # v1.10 Martineau Fix CIDR 16->12
access-control: 192.168.0.0/16 allow # v1.10 @dave14305 Fix CIDR 24->16
access-control: 103.86.96.0/16 allow
access-control: 103.86.99.0/16 allow
# RFC1918 private IP address - Protects against DNS Rebinding
private-address: 127.0.0.0/8
private-address: 169.254.0.0/16
private-address: 10.0.0.0/8
private-address: 172.16.0.0/12
private-address: 192.168.0.0/16
private-address: fd00::/8 # v1.11 Martineau
private-address: fe80::/10 # v1.11 Martineau
dns64-ignore-aaaa: ".*.*"
dns64-ignore-aaaa: "*"
dns64-ignore-aaaa: *.
do-not-query-address: ::/0
do-not-query-address: ::1
do-not-query-address: ::0/0
do-not-query-address: fe80::/10
do-not-query-address: fd00::/8
do-not-query-address: ::0
do-not-query-address: ::
do-ip4: yes
do-udp: yes
do-tcp: yes
prefer-ip4: yes
prefer-ip6: no
do-nat64: no
dns64-synthall: no
local-zone: "ipv6.microsoft.com" refuse
local-zone: "teredo.reality" refuse
local-zone: "xbox-ipv6.xboxlive.com" refuse
local-zone: "teredo.xboxlive.com" refuse
local-zone: "ipv6.msftncsi.com" refuse
local-zone: "teredo.ipv6.microsoft.com" refuse
local-zone: "ipv6.msftconnecttest.com" refuse
local-zone: "win1910.ipv6.microsoft.com" refuse
local-zone: "win10.ipv6.microsoft.com" refuse
local-zone: "win8.ipv6.microsoft.com" refuse
local-zone: "win7.ipv6.microsoft.com" refuse
local-zone: "xbox.ipv6.microsoft.com" refuse
local-zone: "ipv6.litwareinc.com" refuse
local-zone: "teredo.autoconfig.ipv6.microsoft.com" refuse
local-zone: "isatest.public.amers.ham1.ipv6.microsoft.com" refuse
local-zone: "6to4.ipv6.microsoft.com" refuse
local-zone: "ip6.arpa" refuse
local-zone: "vrchatapi.onrender.com" refuse
local-zone: "vrcx.live" refuse
local-zone: "gigdi.net" refuse
local-zone: "vrchatip.com" refuse
local-zone: "vrchatapi.pages.dev" refuse
local-zone: "sync.top" refuse
local-zone: "umbrellacorp.vrchat.cloud" refuse
local-zone: "onrender.com" refuse
local-zone: "pages.dev" refuse
local-zone: "replit.co" refuse
local-zone: "replit.dev" refuse
local-zone: "workers.dev" refuse
local-zone: "slothytech.com" refuse
#########################################
# integration IPV6
#
do-ip6: no
private-address: ::/0 # v1.11 Martineau Enhance 'do-ip6: no' i.e. explicitly drop ALL IPv6 responses
# do-ip6: no
# edns-buffer-size: 1200 # v1.11 as per @Linux_Chemist https://www.snbforums.com/threads/u...aller-utility-for-unbound-recursive-dns-serve>
# access-control: ::/0 refuse
# access-control: ::0/0 refuse
# access-control: ::1 refuse
# access-control: fd00::/8 refuse
# access-control: fe80::/10 refuse
# access-control: ::0 refuse
# private-address: fd00::/8
# private-address: fe80::/10
#########################################
tls-cert-bundle: "/etc/ssl/certs/ca-certificates.crt" # v1.01 as per @dave14305 minimal config
# no threads and no memory slabs for threads
num-threads: 4
msg-cache-slabs: 4
rrset-cache-slabs: 4
infra-cache-slabs: 4
key-cache-slabs: 4
ip-ratelimit-slabs: 4
ratelimit-slabs: 4
# tiny memory cache
extended-statistics: yes # v1.06 Martineau for @juched GUI TAB
key-cache-size: 50m
msg-cache-size: 50m
rrset-cache-size: 100m
ip-ratelimit-size: 16m
ratelimit-size: 16m
http-query-buffer-size: 16m
http-response-buffer-size: 16m
stream-wait-size: 50m
quic-size: 16m
cache-max-ttl: 3600 # v1.08 Martineau
cache-min-ttl: 0 # v1.08 Martineau
# prefetch
prefetch: yes
prefetch-key: yes
minimal-responses: yes
serve-expired: yes
serve-expired-ttl: 3600 # v1.12 as per @juched
serve-expired-ttl-reset: yes # v1.13 as per @jumpsmm7 Set the TTL of expired records to the serve-expired-ttl value after a failed attempt to retrieve the record from upstream.
incoming-num-tcp: 950
outgoing-num-tcp: 200
num-queries-per-thread: 100
outgoing-range: 200
jostle-timeout: 5000
ip-ratelimit: 2000 # v1.04 as per @L&LD as it impacts ipleak.net?
edns-buffer-size: 1100 # v1.01 as per @dave14305 minimal config
max-udp-size: 1024 # v1.13 as per @jumpsmm7 mitigate DDOS threats when using dnssec, reduce potential for fragmentation.
#outgoing-port-avoid: 0-32767 # v1.13 as per @jumpsmm7 avoid grabbing udp ports commonly used / only for users with UDP port availability problems
#outgoing-port-permit: 32768-65535 # v1.13 as per @jumpsmm7 ports to permit / Not necessary if port-avoid is not used. limits port randomization.
sock-queue-timeout: 5
infra-cache-numhosts: 40000
discard-timeout: 6334
unwanted-reply-threshold: 5000000
infra-keep-probing: no
infra-host-ttl: 900
infra-lame-ttl: 900
so-reuseport: yes
tcp-reuse-timeout: 90000
msg-buffer-size: 65552
max-global-quota: 300
delay-close: 60000
http-max-streams: 150
tls-use-sni: no
pad-responses: yes
pad-responses-block-size: 468
pad-queries: yes
pad-queries-block-size: 128
val-bogus-ttl: 90
wait-limit-cookie: 20000
wait-limit: 2000
infra-cache-min-rtt: 60
infra-cache-max-rtt: 180000
tcp-idle-timeout: 45000
max-reuse-tcp-queries: 300
tcp-auth-query-timeout: 6000
unknown-server-time-limit: 6000
neg-cache-size: 16m
val-sig-skew-min: 3600
val-sig-skew-max: 86400
cache-min-negative-ttl: 0
cache-max-negative-ttl: 3600
serve-expired-client-timeout: 6000
iter-scrub-ns: 20
iter-scrub-cname: 11
max-sent-count: 32
answer-cookie: yes
target-fetch-policy: "0 0 0 0 0 0 0 0 0 0 0 0"
ip-ratelimit-cookie: 20000
val-max-restart: 5
val-nsec3-keysize-iterations: "1024 150 2048 150 4096 150"
serve-expired-reply-ttl: 45
outbound-msg-retry: 5
serve-original-ttl: yes
max-query-restarts: 11
ip-freebind: yes
ip-ratelimit-factor: 10
ratelimit-factor: 10
udp-connect: yes
tcp-mss: 1000
outgoing-tcp-mss: 900
edns-tcp-keepalive: yes
edns-tcp-keepalive-timeout: 180000
tls-ciphers: "ECDHE-RSA-WITH-AES256-GCM-SHA384"
tls-ciphersuites: "TLS_AES_256_GCM_SHA384"
ede: yes
ede-serve-expired: yes
ratelimit: 2000
fast-server-permil: 900
fast-server-num: 3
# Ensure kernel buffer is large enough to not lose messages in traffic spikes
#so-rcvbuf: 2m # v1.05 Martineau see DEFAULT /proc/sys/net/core/rmem_default
#so-sndbuf: 2m
#########################################
# Options for integration with TCP/TLS Stubby
# udp-upstream-without-downstream: no
#########################################
# gentle on recursion
hide-identity: yes
hide-version: yes
do-not-query-localhost: yes
qname-minimisation: yes
harden-glue: yes
harden-below-nxdomain: yes
rrset-roundrobin: yes
aggressive-nsec: yes
deny-any: yes
use-caps-for-id: no
harden-referral-path: no
harden-algo-downgrade: yes
harden-large-queries: no
harden-short-bufsize: yes
val-clean-additional: yes
harden-dnssec-stripped: no
qname-minimisation-strict: no
harden-unverified-glue: no
hide-http-user-agent: no
harden-unknown-additional: yes
# Self jail Unbound with user "nobody" to /var/lib/unbound
username: "nobody"
directory: "/opt/var/lib/unbound"
chroot: "/opt/var/lib/unbound"
# The pid file
pidfile: "/opt/var/run/unbound.pid"
# ROOT Server's
root-hints: "/opt/var/lib/unbound/root.hints"
# DNSSEC
auto-trust-anchor-file: "/opt/var/lib/unbound/root.key"
auth-zone:
name: "."
url: "https://www.internic.net/domain/root.zone"
fallback-enabled: no
for-downstream: no
for-upstream: yes
zonefile: root.zone
(fixes vpn ping 60 and ping restart 180 when VPN is binded) (infra-cache-max-rtt: 180000)
surgical precision.
Lowered cache values as they were set to high in my config
- Hit ratio stays high (80-95%) for home traffic patterns.
- No memory pressure — avoids OOM kills during peak usage.
unbound.conf(5) — Unbound 1.24.2 documentation
this is official guide if you have any questions
Copy and paste if you like the setup (1 gig ram 4 core router setup)
remote-cert-tls server
remote-random
nobind
resolv-retry infinite
persist-key
persist-tun
auth-nocache
tls-version-min 1.2
tls-version-max 1.3
tls-ciphersuites TLS_AES_256_GCM_SHA384
tls-cert-profile preferred
data-ciphers AES-256-GCM
tls-groups X25519
verify-x509-name CN=ca1304.nordvpn.com
reneg-sec 3600
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
ping 60
ping-restart 180
ping-timer-rem
proto udp4
tls-cipher TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384
pull
pull-filter ignore "ifconfig-ipv6"
pull-filter ignore "route-ipv6"
pull-filter ignore "redirect-gateway ipv6"
pull-filter ignore "dhcp-option DNS"
pull-filter ignore "dhcp-option DNS6"
pull-filter ignore "block-outside-dns"
block-ipv6
mute-replay-warnings
#log /tmp/vpn.log
Last edited: