What's new

Dnscrypt from opendns

  • SNBForums Code of Conduct

    SNBForums is a community for everyone, no matter what their level of experience.

    Please be tolerant and patient of others, especially newcomers. We are all here to share and learn!

    The rules are simple: Be patient, be nice, be helpful or be gone!

Hi guys I got a question, everytime I install dnscrypt, it works with no issues but sometimes when entware stops working, because any cause, I mean faulty usb, an update to entware that breaks it, etc so having dnscrypt when these things happen it breaks all communication, the router is looking for the 127.0.0.1 for dns... what can I do and how to do a secondary DNS config so when entware fails I will still have internet connection using a secondary DNS?
thanks
 
Hey guys,

I updated dnscrypt-proxy a few days ago, and while it's not clear that the update caused the issue, I seem to be having a problem, if it is even a problem.

Basically it looks as though there is a new server certificate available, but DNS crypt just keeps using the old one over and over. Does anyone else have this issue? Does this matter? See log below:

Code:
May 18 04:05:31 dnscrypt-proxy[776]: Refetching server certificates
May 18 04:05:31 dnscrypt-proxy[776]: Server certificate #1463092899 received
May 18 04:05:31 dnscrypt-proxy[776]: This certificate is valid
May 18 04:05:31 dnscrypt-proxy[776]: Server certificate #1435874751 received
May 18 04:05:31 dnscrypt-proxy[776]: This certificate is valid
May 18 04:05:31 dnscrypt-proxy[776]: Certificate #1463092899 has been superseded by certificate #1435874751
May 18 04:05:31 dnscrypt-proxy[776]: Chosen certificate #1463092899 is valid from [2016-05-13] to [2017-05-13]
May 18 04:05:31 dnscrypt-proxy[776]: Server key fingerprint is ABA1:F000:D394:8045:672D:73E0:EAE6:F181:19D0:2A62:3791:EFAD:B04E:40B7:B6F9:C40B


Sent from my  iPhone using Tapatalk
 
Basically it looks as though there is a new server certificate available, but DNS crypt just keeps using the old one over and over. Does anyone else have this issue? Does this matter? See log below:

May 18 04:05:31 dnscrypt-proxy[776]: Refetching server certificates
May 18 04:05:31 dnscrypt-proxy[776]: Server certificate #1463092899 received
May 18 04:05:31 dnscrypt-proxy[776]: This certificate is valid
May 18 04:05:31 dnscrypt-proxy[776]: Server certificate #1435874751 received
May 18 04:05:31 dnscrypt-proxy[776]: This certificate is valid
May 18 04:05:31 dnscrypt-proxy[776]: Certificate #1463092899 has been superseded by certificate #1435874751
May 18 04:05:31 dnscrypt-proxy[776]: Chosen certificate #1463092899 is valid from [2016-05-13] to [2017-05-13]
May 18 04:05:31 dnscrypt-proxy[776]: Server key fingerprint is ABA1:F000:D394:8045:672D:73E0:EAE6:F181:19D0:2A62:3791:EFAD:B04E:40B7:B6F9:C40B[
The answer is the bold line above: As the certificate is valid until May 2017 - where is the issue?
 
The answer is the bold line above: As the certificate is valid until May 2017 - where is the issue?

That the certificate has been superseded, but it still uses it.

If this is expected behaviour then fine.

Supersede: to replace in power, authority, effectiveness, acceptance, use, etc., as by another person or thing.
 
Hi guys I got a question, everytime I install dnscrypt, it works with no issues but sometimes when entware stops working, because any cause, I mean faulty usb, an update to entware that breaks it, etc so having dnscrypt when these things happen it breaks all communication, the router is looking for the 127.0.0.1 for dns... what can I do and how to do a secondary DNS config so when entware fails I will still have internet connection using a secondary DNS?
thanks

Hi guys, so there is no way to configure a fallback dns server when dnscrypt fails?
Thanks
 
Forgive me if this is already answered. How do I send dnscrypt queries through the OpenVpn client 1 connection?

tcpdump shows dnscrypt queries going over the WAN
Code:
tcpdump -i eth0 dst 192.168.101.200
Code:
12:10:51.583442 IP 146.176.81.172.rdns.lunanode.com.https > 192.168.101.200.44111: UDP, length 348

Here is my fire-wall start
Code:
iptables -t nat -A PREROUTING -i br0 -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)

Typing ifconfig, it looks like tun11 is the interface I want.
I just want to change this around pro actively just in case the powers that be where I am block the ip's on known dnscrypt servers in the future.
This worked, sent my queries over the vpn but did not use dnscrypt,
Code:
iptables -t nat -A PREROUTING -i br0 -p udp --dport 53 -j DNAT --to $(nvram get vpn_client_remote)
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 53 -j DNAT --to $(nvram get vpn_client_remote)

Any suggestions please, I still only have a learners permit. lol

Edit: I think I figured out a solution. I 'll just run dnscrypt on the vpn/vps, and setup some iptables rules to grab it.
 
Last edited:
How to use dnscrypt.

Instructions from this post was moved to this how-to.

I have Entware installed and running, but cannot even get to packages installed as they seemed to be missing? Are there URL references I can use to grab dnscrypt-proxy and fake-hwclock packages?
Running RT-AC66R on RMerlin 380.58.

Code:
Unknown package 'dnscrypt-proxy'.
Unknown package 'fake-hwclock'.
Collected errors:
* opkg_install_cmd: Cannot install package dnscrypt-proxy.
* opkg_install_cmd: Cannot install package fake-hwclock.

I was able to SOLVE this by installing Entware-NG which had all the packages and now got DNSCrypt installed.
 
Last edited:
I have Entware installed and running, but cannot even get to packages installed as they seemed to be missing? Are there URL references I can use to grab dnscrypt-proxy and fake-hwclock packages?
Running RT-AC66R on RMerlin 380.58.

Code:
Unknown package 'dnscrypt-proxy'.
Unknown package 'fake-hwclock'.
Collected errors:
* opkg_install_cmd: Cannot install package dnscrypt-proxy.
* opkg_install_cmd: Cannot install package fake-hwclock.

I was able to SOLVE this by installing Entware-NG which had all the packages and now got DNSCrypt installed.
i use this tutorial when i need to install dnscrypt-proxy server....
http://www.snbforums.com/threads/dnscrypt-from-opendns.11645/#post-73033
 
Ok, starting over.
  1. Install Entware,
  2. Install dnscrypt:
    Code:
    opkg install dnscrypt-proxy dnscrypt-proxy-hostip
  3. Tell router to use it:
    Code:
    echo "no-resolv" > /jffs/configs/dnsmasq.conf.add
    echo "server=127.0.0.1#65053" >> /jffs/configs/dnsmasq.conf.add
  4. Put this content to /jffs/scripts/wan-start:
    Code:
    #!/bin/sh
    
    # Wait up to 15 seconds to make sure /opt partition is mounted
    i=0
    while [ $i -le 15 ]
    do
        if [ -d /opt/tmp ]
        then
            break
        fi
        sleep 1
        i=`expr $i + 1`
    done
    
    # Now resolve DNS name for NTP server
    ntp_name=$(nvram get ntp_server0)
    grep "$ntp_name" /etc/hosts > /dev/null 2>&1 || \
    for ip in $(/opt/sbin/dnscrypt-proxy-hostip $ntp_name)
    do
        echo $ip $ntp_name >>  /etc/hosts
    done
    
    # and restart NTP client to eliminate 4-5 mins delay
    killall ntp && sleep 1
    service restart_ntpc
    and make it executable:
    Code:
    chmod +x /jffs/scripts/wan-start
  5. Reboot router and make sure it works.

Here is boot log, look OK: dnscrypt-proxy started after 25 seconds of booting. Waiting for confirmation before changing first post.

Had to make the following changes for the latest entware:
From:
Code:
opkg install dnscrypt-proxy dnscrypt-proxy-hostip
To:
Code:
opkg install dnscrypt-proxy hostip

From:
Code:
for ip in $(/opt/sbin/dnscrypt-proxy-hostip $ntp_name)
To:
Code:
for ip in $(/opt/bin/hostip $ntp_name)
 
i use this tutorial when i need to install dnscrypt-proxy server....
http://www.snbforums.com/threads/dnscrypt-from-opendns.11645/#post-73033

Thanks....I read all 22 pages, and it appears I got it all installed except now my wireless devices which had no issues connecting to the 2.4Ghz cannot get proper DHCP requests or auth and I have no idea why.

Hoping someone can kindly look at my below configs and suggest a solution? I do have LinkAGG bonded on Port 3&4.

Code:
admin@RT-AC66R-0A60:/jffs/scripts# cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.1.1 router.asus.com
192.168.1.1 www.asusnetwork.net
192.168.1.1 www.asusrouter.com
192.168.1.1 RT-AC66R-0A60. RT-AC66R-0A60

admin@RT-AC66R-0A60:/# robocfg showports
Switch: enabled gigabit
Port 0: 1000FD enabled stp: none vlan: 2 jumbo: off mac: 00:12:d9:54:3e:45
Port 1:   DOWN enabled stp: none vlan: 1 jumbo: off mac: 00:00:00:00:00:00
Port 2:   DOWN enabled stp: none vlan: 1 jumbo: off mac: 00:00:00:00:00:00
Port 3: 1000FD enabled stp: none vlan: 3 jumbo: off mac: 08:62:66:80:d2:7c
Port 4: 1000FD enabled stp: none vlan: 4 jumbo: off mac: 08:62:66:80:d2:7c
Port 8: 1000FD enabled stp: none vlan: 1 jumbo: off mac: ac:22:0b:30:0a:60

admin@RT-AC66R-0A60:/# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.ac220b300a60       yes               vlan1
                                                                                eth1
                                                                                eth2
                                                                                bond0

admin@RT-AC66R-0A60:/# robocfg show
Switch: enabled gigabit
Port 0: 1000FD enabled stp: none vlan: 2 jumbo: off mac: 00:12:d9:54:3e:45
Port 1:   DOWN enabled stp: none vlan: 1 jumbo: off mac: 00:00:00:00:00:00
Port 2:   DOWN enabled stp: none vlan: 1 jumbo: off mac: 00:00:00:00:00:00
Port 3: 1000FD enabled stp: none vlan: 3 jumbo: off mac: 08:62:66:80:d2:7c
Port 4: 1000FD enabled stp: none vlan: 4 jumbo: off mac: 08:62:66:80:d2:7c
Port 8: 1000FD enabled stp: none vlan: 1 jumbo: off mac: ac:22:0b:30:0a:60
VLANs: BCM53115 enabled mac_check mac_hash
   1: vlan1: 1 2 8t
   2: vlan2: 0 8u
   3: vlan3: 3 8t
   4: vlan4: 4 8t
#[Look at my wan-start script]
Code:
#[Look at my wan-start script]
#!/bin/sh
# Wait up to 15 seconds to make sure /opt partition is mounted
i=0
while [ $i -le 15 ]
do
    if [ -d /opt/tmp ]
    then
        break
    fi
    sleep 1
    i=`expr $i + 1`
done
# Now resolve DNS name for NTP server
ntp_name=$(nvram get ntp_server0)
grep "$ntp_name" /etc/hosts > /dev/null 2>&1 || \
for ip in $(/opt/sbin/dnscrypt-proxy-hostip $ntp_name)
do
    echo $ip $ntp_name >>  /etc/hosts
done
# and restart NTP client to eliminate 4-5 mins delay
killall ntp && sleep 1
service restart_ntpc
#[Look at my services-start script]
Code:
#[Look at my services-start script]
#!/bin/sh
RC='/opt/etc/init.d/rc.unslung'
i=30
until [ -x "$RC" ] ; do
  i=$(($i-1))
  if [ "$i" -lt 1 ] ; then
    logger "Could not start Entware-NG"
    exit
  fi
  sleep 5
done
$RC start
/opt/etc/init.d/S09dnscrypt-proxy start
/jffs/scripts/LinkAgg 3 4
 
Last edited:
Don't know what to search for, so I have to ask. If the server goes down, how can I get dns working again without doing a reset?
 
There are two start scripts for each dnscrypt-proxy instances: /opt/etc/init.d/S09dnscrypt-proxy and /opt/etc/init.d/S09dnscrypt-proxy1. Two-both will be automatically started with other Entware services. Please, check both scripts, there may be some errors. You may check them by manual start:
Code:
/opt/etc/init.d/S09dnscrypt-proxy start
/opt/etc/init.d/S09dnscrypt-proxy1 start

I was testing this out by manually starting the scripts separately, I found that:

/opt/etc/init.d/S09dnscrypt-proxy start (works fine)
/opt/etc/init.d/S09dnscrypt-proxy1 start (tells me that dnscrypt-proxy is already running)

If I do a ps though, I can only see one running. Also, if I copy the contents of the file and just run it manually, it works fine. (ie: dnscrypt-proxy --local-address=127.0.0.1:65054 --daemonize -R opendns)

So is there any reason why the scripts seem to be calling each other?

I think I actually mentioned something similar in a previous post, except there is was when I said "stop" they all seemed to stop. Although, considering the above, the second one was probably never running.
 
I am assuming you have different scripts in init.d for dnscrypt-proxy
i.e.,
S09dnscrypt-proxy
S10dnscrypt-proxy
S11dnscrypt-proxy

In your S10dnscrypt-proxy make sure that
#!/bin/sh

ENABLED=yes
PROCS=dnscrypt-proxy2

In your S11dnscrypt-proxy make sure that
#!/bin/sh

ENABLED=yes
PROCS=dnscrypt-proxy3

Start your scripts now individually and see if it works out.
Additionally you might want to link
dnscrypt-proxy2 and
dnscrypt-proxy3
to dnscrypt-proxy
 
I am assuming you have different scripts in init.d for dnscrypt-proxy
i.e.,
S09dnscrypt-proxy
S10dnscrypt-proxy
S11dnscrypt-proxy

In your S10dnscrypt-proxy make sure that
#!/bin/sh

ENABLED=yes
PROCS=dnscrypt-proxy2

In your S11dnscrypt-proxy make sure that
#!/bin/sh

ENABLED=yes
PROCS=dnscrypt-proxy3

Start your scripts now individually and see if it works out.
Additionally you might want to link
dnscrypt-proxy2 and
dnscrypt-proxy3
to dnscrypt-proxy
Thanks, I'll look into this. At the moment I have a work around of just starting them manually via the services-start script.
 
I have another question regarding DNSSEC with DNSCrypt...

Before putting DNSCrypt back on, my DNSSEC was working fine. However, since putting DNSCrypt on, I can't reach any DNSSEC enabled sites....

For example, doing a dig using my two DNSCrypt resolvers manually works fine:

Code:
dig internet.nl +dnssec +multi +short @95.85.9.86

185.49.141.28

A 7 2 3600 20161013033608 20160922044936 28409 internet.nl. eptGraOJ6tTrYncrlecCaUjulDlgJ9FMp/qUZb6vYH9toBvDYt5DX+Do 7J9tAf4ydkf9Iq514ktyANVm/OGhphMMJuG30aO3p3dtEvhtb0k+Ud6U OqsUvEGOKb18g4ucmnM7+lJHDhdgQEkPa/Q5e/Rn0pUUKT+KxK4ksCMK FT8=

Code:
dig internet.nl +dnssec +multi +short @185.83.217.248

185.49.141.28

A 7 2 3600 20161013033608 20160922044936 28409 internet.nl. eptGraOJ6tTrYncrlecCaUjulDlgJ9FMp/qUZb6vYH9toBvDYt5DX+Do 7J9tAf4ydkf9Iq514ktyANVm/OGhphMMJuG30aO3p3dtEvhtb0k+Ud6U OqsUvEGOKb18g4ucmnM7+lJHDhdgQEkPa/Q5e/Rn0pUUKT+KxK4ksCMK FT8=

However, when I use the router as the resolver, it just fails...
Code:
dig internet.nl +dnssec +multi +short @192.168.1.1

;; Truncated, retrying in TCP mode.

From my log, I only see the following:
Code:
Oct  2 13:05:08 rc_service: httpds 756:notify_rc restart_dnsmasq
Oct  2 13:05:08 dnsmasq[10294]: exiting on receipt of SIGTERM
Oct  2 13:05:08 custom config: Appending content of /jffs/configs/dnsmasq.conf.add.
Oct  2 13:05:08 dnsmasq[10377]: started, version 2.76 cachesize 1500
Oct  2 13:05:08 dnsmasq[10377]: DNSSEC validation enabled
Oct  2 13:05:08 dnsmasq[10377]: warning: ignoring resolv-file flag because no-resolv is set
Oct  2 13:05:08 dnsmasq[10377]: asynchronous logging enabled, queue limit is 5 messages
Oct  2 13:05:08 dnsmasq-dhcp[10377]: DHCP, IP range 192.168.134.2 -- 192.168.134.254, lease time 1d
Oct  2 13:05:08 dnsmasq-dhcp[10377]: DHCPv6 stateless on br0
Oct  2 13:05:08 dnsmasq-dhcp[10377]: router advertisement on br0
Oct  2 13:05:08 dnsmasq-dhcp[10377]: IPv6 router advertisement enabled
Oct  2 13:05:08 dnsmasq[10377]: using nameserver ::1#65054
Oct  2 13:05:08 dnsmasq[10377]: using nameserver ::1#65053
Oct  2 13:05:08 dnsmasq[10377]: using nameserver 127.0.0.1#65054
Oct  2 13:05:08 dnsmasq[10377]: using nameserver 127.0.0.1#65053
Oct  2 13:05:08 dnsmasq[10377]: read /etc/hosts - 6 addresses
Oct  2 13:05:10 dnsmasq[10377]: read /opt/var/cache/ublockr/ipv6_hosts - 95570 addresses
Oct  2 13:05:11 dnsmasq[10377]: read /opt/var/cache/ublockr/ipv4_hosts - 95570 addresses
Oct  2 13:05:11 dnsmasq[10377]: read /etc/hosts.dnsmasq - 29 addresses
Oct  2 13:05:11 dnsmasq-dhcp[10377]: read /etc/ethers - 29 addresses
Oct  2 13:05:11 dnsmasq[10377]: using nameserver ::1#65054
Oct  2 13:05:11 dnsmasq[10377]: using nameserver ::1#65053
Oct  2 13:05:11 dnsmasq[10377]: using nameserver 127.0.0.1#65054
Oct  2 13:05:11 dnsmasq[10377]: using nameserver 127.0.0.1#65053

Is there something special I need to do in order to get both working? I'm currently using Merling 380.62_1

Looks like the response from my router is too big when there is DNSSEC enabled.

Sent from my iPhone using Tapatalk
 
Last edited:
I'm not able to run 2 dnscrypt sessions at the same time. I want to have a fall back solution if 1 dns resolver fails to go the 2nd one.

1st script S09dnscrypt-proxy
Code:
#!/bin/sh
ENABLED=yes
PROCS=dnscrypt-proxy
ARGS="----local-address=127.0.0.1:65053 --daemonize -R dnscrypt.eu-nl-ipv6"
PREARGS=""
DESC=$PROCS
PATH=/opt/sbin:/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
. /opt/etc/init.d/rc.func

2nd script S08dnscrypt-proxy
Code:
#!/bin/sh
ENABLED=yes
PROCS=dnscrypt-proxy2
ARGS="--local-address=127.0.0.1:65054 --daemonize -R cisco"
PREARGS=""
DESC=$PROCS
PATH=/opt/sbin:/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
. /opt/etc/init.d/rc.func

Error output
Code:
Starting dnscrypt-proxy2...              failed

Syslog output
Oct 28 11:15:20 router.lan user.notice admin: Failed to start dnscrypt-proxy2 from .

DNScrypt is working very good, not issue with the 1st script, can someone point me in the right direction to resolve this?
 
I'm not able to run 2 dnscrypt sessions at the same time.
Remove the "2" in "PROCS=dnscrypt-proxy2". That's the name of the program to run.
 
Remove the "2" in "PROCS=dnscrypt-proxy2". That's the name of the program to run.

does not solve the problem, because the 1st process was already started, I cant start a second session

S08dnscrypt-proxy
Code:
Starting dnscrypt-proxy...              already running.
 
does not solve the problem, because the 1st process was already started, I cant start a second session

S08dnscrypt-proxy
Code:
Starting dnscrypt-proxy...              already running.

I just removed those scripts and rather put the command in manually at /jffs/scripts/services-start

I have 4 in total.
2x IPv4
2x IPv6


Sent from my iPhone using Tapatalk
 
does not solve the problem, because the 1st process was already started, I cant start a second session.[/CODE]
EDIT: Sorry, there was a bug with passing $CMDLINE. It's fixed now.

I see the problem, they're using 'pidof' on the program name. Here's a fix. I added a function to rc.func. Now it gets the PID for an entire command line (PROC + ARGS).

/opt/etc/init.d/rc.func
Code:
#!/bin/sh

ACTION=$1
CALLER=$2

ansi_red="\033[1;31m";
ansi_white="\033[1;37m";
ansi_green="\033[1;32m";
ansi_yellow="\033[1;33m";
ansi_blue="\033[1;34m";
ansi_bell="\007";
ansi_blink="\033[5m";
ansi_std="\033[m";
ansi_rev="\033[7m";
ansi_ul="\033[4m";

get_pid () {
  local cmdline="$@"
  /bin/echo $(/bin/ps ww | /bin/grep -F "$cmdline" | /bin/grep -v grep) | /usr/bin/cut -f1 -d' '
}
start() {
    [ "$CRITICAL" != "yes" -a "$CALLER" = "cron" ] && return 7
        [ "$ENABLED" != "yes" ] && return 8
    echo -e -n "$ansi_white Starting $DESC... "
    if [ -n "`get_pid $CMDLINE`" ]; then
        echo -e "            $ansi_yellow already running. $ansi_std"
        return 0
    fi
    $PRECMD > /dev/null 2>&1
    $PREARGS $PROC $ARGS > /dev/null 2>&1 &
    #echo $PREARGS $PROC $ARGS
    COUNTER=0
    LIMIT=10
    while [ -z "`get_pid $CMDLINE`" -a "$COUNTER" -le "$LIMIT" ]; do
        sleep 1;
        COUNTER=`expr $COUNTER + 1`
    done
    $POSTCMD > /dev/null 2>&1

    if [ -z "`get_pid $CMDLINE`" ]; then
        echo -e "            $ansi_red failed. $ansi_std"
        logger "Failed to start $DESC from $CALLER."
        return 255
    else
        echo -e "            $ansi_green done. $ansi_std"
        logger "Started $DESC from $CALLER."
        return 0
    fi
}

stop() {
    case "$ACTION" in
        stop | restart)
            echo -e -n "$ansi_white Shutting down $PROC... "
            killall $PROC 2>/dev/null
            COUNTER=0
            LIMIT=10
            while [ -n "`get_pid $CMDLINE`" -a "$COUNTER" -le "$LIMIT" ]; do
                sleep 1;
                COUNTER=`expr $COUNTER + 1`
            done
            ;;
        kill)
            echo -e -n "$ansi_white Killing $PROC... "
            killall -9 $PROC 2>/dev/null
            ;;
    esac

    if [ -n "`get_pid $CMDLINE`" ]; then
        echo -e "            $ansi_red failed. $ansi_std"
        return 255
    else
        echo -e "            $ansi_green done. $ansi_std"
        return 0
    fi
}

check() {
    echo -e -n "$ansi_white Checking $DESC... "
    if [ -n "`get_pid $CMDLINE`" ]; then
        echo -e "            $ansi_green alive. $ansi_std";
        return 0
    else
        echo -e "            $ansi_red dead. $ansi_std";
        return 1
    fi
}

reconfigure() {
    SIGNAL=SIGHUP
    echo -e "$ansi_white Sending $SIGNAL to $PROC... "
    killall -$SIGNAL $PROC 2>/dev/null
}


for PROC in $PROCS; do
    CMDLINE="$PROC $ARGS"
    case $ACTION in
        start)
            start
            ;;
        stop | kill )
            check && stop
            ;;
        restart)
            check > /dev/null && stop
            start
            ;;
        check)
            check
            ;;
        reconfigure)
            reconfigure
            ;;
        *)
            echo -e "$ansi_white Usage: $0 (start|stop|restart|check|kill|reconfigure)$ansi_std"
            exit 1
            ;;
    esac
done

#logger "Leaving ${0##*/}."
 
Last edited:
Similar threads

Support SNBForums w/ Amazon

If you'd like to support SNBForums, just use this link and buy anything on Amazon. Thanks!

Sign Up For SNBForums Daily Digest

Get an update of what's new every day delivered to your mailbox. Sign up here!
Top