SeaMeshBox

PC Hardware
Extra PCI NICs are $1 used (100mbps). Dual-port and gigabit NICs seem substantially pricier. Need to determine at what speeds the CPU or NIC is more likely to be the bottleneck in bandwidth. Try to stick with well-known brands (3com, intel, d-link, linksys, netgear, broadcom are all things to look for stamped on the side) to avoid driver issues, though PCI NICs are so generic I'd be surprised to see a single one that didn't work with a modern OS.

Smaller cases are best, most will have room for a PCI NIC. A custom case design using cheap plastic containers is also possible.

Benchmarking of power consumption, to determine solar panel and battery requirements, would be good.

Operating System, Basic Configuration
Probably going with Debian.

It is possible to automate the installer.

http://www.50ply.com/blog/2012/07/16/automating-debian-installs-with-preseed-and-puppet/

Also, a bash script run post-install can automate installing a lot of packages and modifying configs. Commands that can be done very easily automatically are apt-get install -y, wget, and dpkg -i. Also apt-get remove any packages that aren't needed, like office stuff.

Modifying config files, sometimes based on manual input, will be a little harder, but probably trivial for someone more experienced with bash.

Desktop
Should probably be able to boot to command line and have everything it needs to get going without any user intervention by default.

I would like it to have an optional desktop with a few useful GUI config tools though.

Best to use something lightweight like LXDE/Openbox or even XFCE.

NAT
Haven't found many good articles on how to do this with IPv6. Here are a couple.

http://packetpushers.net/thank-goodness-for-nat66/

https://home.regit.org/2011/08/ulrich-weber-ipv6-nat/

DHCP
So clients can access the gateway via it's LAN interface. dnsmasq seems to be a common option. Would it make more sense to use IPv4 private (10.x.x.x, 172.16-31.x.x, 192.168.x.x) or IPv6 unique local (fd00::/8) range for the LAN subnet?

What should it set for DNS? probably this... or dnsmasq server acting as a forwarder to it.

Example dnsmasq config:

>nano -w /etc/dnsmasq.conf

interface=eth1

listen-address=127.0.0.1

domain= (not sure what to put here)

dhcp-range=192.168.0.100,192.168.0.110,12h

Extra Drivers
Should install any drivers needed to give broad hardware compatibility.

Possibly wireless drivers, though wireless will likely be provided via firmware on a separate device connected at layer 2 to the CJDNS interface.

See if there are some extra NIC drivers in debian contrib and non-free repositories that could be easily added, though I'm guessing nearly all PCI NICs will work with Debian out of the box.

Remote Administration
SSH with openssh-server

Look into Webmin management GUI. Might be able to do router configs without having to screw with IPtables from CLI or anything like that. >wget http://prdownloads.sourceforge.net/webadmin/webmin_1.610_all.deb >sudo dpkg -i webmin_1.610_all.deb

xtightvnc or x11vnc on the LAN interface might be handy, if there is a desktop at all.

Performance Monitoring
conky with bandwidth and CPU monitors would be helpful.

CJDNS
Its like five lines and a config file. Ask Dan for a tutorial, and document it this time.

Also see this guide: https://github.com/cjdelisle/cjdns/blob/master/doc/nat-gateway.md

Routing Configuration
I currently have no idea how to set up the routing daemon, IPtables, etc. on Linux. Some places to start...

http://www.raspberrypi.org/forums/viewtopic.php?f=36&t=31881

http://ubuntuforums.org/showthread.php?t=926001

https://github.com/cjdelisle/cjdns/blob/master/doc/nat-gateway.md

https://wiki.projectmeshnet.org/Init.d_script

https://wiki.projectmeshnet.org/Install_on_Ubuntu

http://openmaniak.com/quagga_tutorial.php

http://www.policyrouting.org/iproute2.doc.html#ss9.1.2

https://opensourcecentre.wordpress.com/article/install-quagga-as-linux-router/

http://how-to.wikia.com/wiki/How_to_set_up_a_NAT_router_on_a_Linux-based_computer

http://www.howtoforge.com/nat_iptables

http://www.linuxreport.org/content/view/23/20/

http://blog.noviantech.com/2010/12/22/debian-router-gateway-in-15-minutes/

Recipe so far:

>su >visudo Add current user to sudoers .conf file, copy the existing line for root.

>sudo gedit /etc/apt/sources.list Comment out the lines that say to look on the CD repository. For some reason, this stopped apt-get from looking online even though those were also in sources.list.

>sudo apt-get install bind9 dhcp3-server perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl libdigest-md5-perl apt-show-versions libapt-pkg-perl Will complain about missing dependencies.

>sudo apt-get -f install and again... >sudo apt-get install bind9 dhcp3-server perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl libdigest-md5-perl apt-show-versions libapt-pkg-perl

Note: LOOK UP WHAT THESE PACKAGES DO. There are likely a few others that will be useful.

To enable routing...

>sudo nano -w /etc/sysctl.conf Lines to possibly uncomment: net.ipv4.ip_forward=1 net.ipv6.conf.all.forwarding=1 (is uncommenting this line necessary? Assuming that installing CJDNS enables ipv6 routing on the CJDNS interface...)

To enable changes: >/etc/init.d/networking restart or possibly... >sysctl -p /etc/sysctl.conf or... >/etc/init.d/procps.sh restart (use whichever works)

To set LAN IP interface:

>sudo nano -w /etc/network/interfaces

iface eth1 inet static address x.x.x.x broadcast x.x.x.255 netmask x.x.x.x
 * 1) device: eth1 auto eth1

(replace eth1 with whatever that interface actually is of course)

alternative: >ifconfig (see adapters, figure out which one is the LAN adapter) >sudo ifconfig eth1 192.168.0.1 netmask 255.255.255.0

Wireless Hardware Setup
Can be cheap routers with DD-WRT or OpenWRT set up as AP's? Would USB wireless adapters also be an option? Would like to keep antenna separate from router to avoid driver annoyances. Ideally, long-range antennas like OmniTik.

Wireless Configuration
How to get these on the same SSID and all that as Seattle Meshnet.

End-User Customization/Distribution
So, we've got these boxes were giving to people. What do they have to do to get it running? What do we do for them at that point? What kind of support are we willing to provide in helping them with setup?

External Resources
http://debian-handbook.info/browse/stable/network-infrastructure.html

http://www.reddit.com/r/darknetplan/

http://www.reddit.com/r/dorknet/

https://wiki.projectmeshnet.org/Main_Page

https://seattlemesh.net/