Server Pisang                                                        Laatste wijziging 2017-02-07


In Het Kort:

Ik heb sinds jaren een home-server 24/7 draaien op een PC-minitower platform. In het verleden WXP, later Ubuntu Linux.
Dat verbruikte ca. 80 Watt, dat is 80 * 24 / 1000 * 365 *  0.22  = ca. € 154,= per jaar aan elektra kosten. 

Ik heb die functies overgezet op een Banana-Pi, die verbruikt samen met de harddisk ca. 15 Watt, of € 29,= per jaar, dus de aanschaf van pakweg € 60,= heb je er in een paar maanden uit.
En ja, het kan allemaal ook anders, ik vertel hier alleen maar hoe ik het gedaan heb.

Een aantal configuratiebestanden staan in deze zip-file.

De snelle weg
Om zelf een server in deze trant op te bouwen kun je het verhaal hieronder volgen, maar er is een snellere weg: Zorg dat je in het bezit komt van de juiste Banana-Pi en een SD-kaart van 16GB. Zorg dat ik die dingen krijg, dan maak ik een kloon van mijn server, test die op jouw banaan en verander een paar privacy instellingen en krijg je'm terug, gratis. Onderaan dit verhaal staat wat je dan nog zelf moet doen.

18 oktober 2016 had ik een crash, de banaan wilde niet meer opstarten. Dat heeft een hoop gedoe gegeven om weer bij mijn bestanden te kunnen,
in het bijzonder bij dit verhaal dat ook op die harddisk staat.
Mijn advies is: zorg dat je een geteste mogelijkheid hebt om de harddisk aan te kopppelen aan een ander systeem.
De oorzaak is onbekend gebleven, een vermoeden dat de SD-kaart in het ongerede is geraakt doordat ik diverse (intensieve) logging op die kaart deed is niet bevestigd, die bleek na herinstallatie ook perfect te werken.
Ik heb met een nieuwe SD kaart alles opnieuw geïnstalleerd, en daarbij zijn er nogal wat wijzigingen in dit verhaal gekomen.
O.m. installeer ik Krusader nu heel vroeg in het proces, en gebruik diens F4 editor voor het aanpassen van configuratiebestanden. Een editor in een terminal window is niet meer nodig. Ook installeer ik Samba zo snel mogelijk; het verdere configuren kan nu vrijwel geheel vanaf een Windows PC

Opstelling-tmb.jpg

Klik voor groter.

Van links naar rechts de Harddisk, een HDMI naar VGA converter, bovenaan de voeding, midden de banaan en rechts een USB hubje.
Buiten beeld een USB Harddisk interface, die gebruik ik zo af en toe voor een back-up.

Hieronder het eisenpakket, en daarna de manier waarop je e.e.a. zou kunnen installeren en configureren.
De server moet voorzien in:
a/ Een harrddisk waarop alle belangrijke bestanden staan, zodat die vanaf iedere computer in huis toegankelijk zijn.
b/
Die bestanden moeten toegankelijk zijn voor zowel Windows- als Linux computers in mijn huis.

c/
Die bestanden moeten ook met mijn laptop op een veilige manier toegankelijk zijn vanuit de wereld buiten mijn huis.

d/
Een bepaalde groep bestanden moet als web toegankelijk zijn voor de rest van de wereld.

e/
Het onderhouden van de server moet ook vanaf andere computers in huis kunnen, maar beslist niet vanuit buitenshuis via het internet.

In a/ wordt voorzien door de Banana-Pi-Pro, deze heeft een SATA aansluiting voor een harddisk en een gigabyte Ethernet poort.
b/ betekent dat er zowel samba- als nfs-export moet zijn.
c/ betekent dat er een beveiligde verbinding moet kunnen bestaan tussen mijn laptop, waar ook ter wereld, en de server. De keuze is gevallen op OpenVpn.
d/ betekent dat er een webserver moet zijn. De keuze is gevallen op Apache2
.
e/ vereist dat ssh-server geinstalleerd is. Je kunt dan met een terminal emulator als bijv. PUTTY inloggen op de server. Maar zorg dat op je ADSL modem/router de ssh poort(en) dicht zitten. 


Formattering van deze tekst:

In het verdere gebruik ik het font Courier in paars voor alle  commando's, bestandsnamen en -paden, en voor de inhoud van configuratie bestanden.
Alle commando's die ik aangeef worden in een terminal-window gegeven, hier heet dat LXTerminal (ctr-alt-T werkt niet). Even verderop kan het ook via een login vanaf een andere computer. Let erop dat spaties in commando's belangrijk zijn.
Als editor gebruik ik de F4- editor van Krusader, die gestart is als  root.


Linux voor beginners:

Voor diegenen die (nog) niet zo bekend zijn met linux geef ik hier de belangrijkste commando's:
Veel (systeem) commando's mogen alleen door een super-user gegeven worden. Een gewone gebruiker kan zich superuser maken door vóór elk commando de kreet sudo (superuser do) te zetten of door 1-malig het su commando te geven (maak mij superuser). Het superuser password is normaliter hetzelfde als het gebruikerspassword.
Het linux bestandsysteem begint bij /  uit te spreken als "root", niet te verwarren met het root account, dat is voor de gebruiker "root" die alles mag.
De meeste configuratie bestanden staan in /etc
Navigeren door het bestandssysteem: cd /pad-vanaf-root of  cd pad-vanaf-huidige-positie
Overal waar een bestandsnaam opgegeven kan worden kan ook een pad+bestandsnaam opgegeven worden waarbij het pad relatief kan zijn t.o.v. de huidige positie, of absoluut, en dan begint het met /  Bestands- en padnamen zijn hoofdlettergevoelig.
Een pad dat begint met ../  is relatief en start 1 nivo hoger dan waar je bent.
Lijst van bestandsnamen: ls of ls -al, evt. gevolgd door  <pad>
Aanmaken van een directory (map)  mkdir directorynaam   of verwijderen:  rmdir directorynaam (dir moet leeg zijn)
Aanmaken van een (configuratie / tekst) bestand  nano bestandsnaam Als het bestand al bestaat kun je het nu editen, anders wordt er een nieuw bestand gemaakt. Nano kun je niet met de muis bedienen! Alles moet met de cursor toetsen.
Bekijken van een
(configuratie / tekst) bestand: cat bestandsnaam
Copiëren van een bestand: cp bestaande-bestandsnaam nieuwe-bestandsnaam
Hernoemen of verplaatsen van een bestand: mv bestaande-bestandsnaam nieuwe-bestandsnaam
Verkrijgen van gedetailleerde informatie over 1 of ander commando of programma: man commando (alleen engels)
Bij twijfel: Vraag het aan het internet.

BananaPi:

Let erop dat er een paar verschillende smaken zijn. Kies een versie met 10/100/1000 MB ethernet en een SATA aansluiting.
Als je een USB harddisk wilt gebruiken kun je bijna alle versies van Raspberry / Banana -Pi en veel andere vergelijkbare Pietjes gebruiken. De procedures en configuraties zijn veelal zo goed als het zelfde.


Benodigd:

Banana Pi. Neem een model met SATA poort. Ik heb de Pro-versie. Heeft ook wifi maar dat wordt (nog) niet gebruikt)
Een voeding die +5Volt en +12Volt levert voor met een geschikte stekker voor de SATA Harddisk.
Een SD-kaart van 8 GB of groter, neem de snelste klasse (10)
Een (usb) card-reader/writer om de software op de SD-kaart te kunnen flashen.
Op een Windows-PC zorg dat de volgende software geïnstalleerd is (voor Linux zijn er vergelijkbare programma's te vinden):
 - SDFormatter voor het formatteren van de SD-kaart
 - Win32DiskImager voor het flashen van de SD-kaart.
 - Putty terminal emulator voor communicatie met de banaan.


Installatie:

Ik heb gekozen voor het Operating Systeem: Raspbian For BananaPi_v1412. Dat leek aardig te werken en andere OS-versies heb ik niet geprobeerd.
link:  http://www.lemaker.org/product-bananapi-download-23.html.
Download het image, en zet dat op de SD-kaart voor de banaan. Zelfde procedure als voor de RaspberryPi.

Het is een .tgz bestand en moet uitgepakt worden van .tgz > .tar > .img Mogelijk moet je een geschikt uitpak programma voor opzoeken.
Je hebt een ding nodig waarmee je een (micro) SD-kaart kunt programmeren.
De kaart moet eerst geformat worden. Dat kan met SDFormatter. Neem QUICK FORMAT en Format Size Adjustment ON.
Dan de .img file naar de SDkaart copiëren met DiskImager. (gewoon copieren werkt niet)

Kaart in de banaan, sluit een monitor, keyboard, muis en netwerkkabel aan. 5V power van een USB stekkervoeding.
Start een terminal window door op het icoon "LXTerminal" te klikken.
Tip: De tekst van het terminal window staat in lichtgrijs en is op sommige monitoren slecht leesbaar. Klik op Edit-Preferences en dan Foreground. Maak die wit door de naam #FFFFFF in te vullen. Terminal window een keer netjes afsluiten, anders beklijft het niet.


Root account:

Het eerste dat ik na een linux installatie altijd doe is het activeren van het root-account. Ik ben dat ge-sudo-nder al heel snel zat. Ja, je introduceert daarmee een veiligheids risico, maar als je de hele configuratie achter de rug hebt kun je het root-account eenvoudig weer uitzetten.

In dit OS is het voldoende om sudo passwd root te geven en dan je root-password 2x op te geven. Na een sudo reboot kun je inloggen als root en is sudo niet meer nodig. Het initiële password is bananapi


Vergroot de Linux partie:

Standaard werd er maar zo'n 3GB gebruikt van mijn 32 GB kaartje.

We doen het volgende:
- In het programma  fdisk vragen we eerst de partitietabel op met p. Een block is 512 bytes groot.
  Je ziet dat die hier 32GB groot is, maar de 2e partitie (mmcblk0p2) is maar 3138560 * 512 =1.6 GB groot
- Met d en 2  deleten we die partitie (wees gerust, de data blijven ok)
- Met n en p maken we een nieuwe primaire partitie 2 (accepteer de 2)
-
We geven de startpositie op, moet exact gelijk zijn aan de oude startpositie, hier 122800.
- We accepteren de default voor de laatste sector en schrijven het naar de partitietabel met w
- Dan doen we een reboot en daarna maken we de partitie effectief met
resize2fs /dev/mmcblk0p2

Hieronder de in te tikken commando's in paars. De rest in is wat de banaan terug zegt.

root@Pisang:~# fdisk /dev/mmcblk0

Command (m for help): p

Disk /dev/mmcblk0: 32.2 GB, 32227983360 bytes
4 heads, 16 sectors/track, 983520 cylinders, total 62945280 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00090806

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192      122879       57344    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          122880     6399999     3138560   83  Linux

Command (m for help): d
Partition number (1-4): 2

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (1-4, default 2):
Using default value 2
First sector (2048-62945279, default 2048): 122880
Last sector, +sectors or +size{K,M,G} (122880-62945279, default 62945279):
Using default value 62945279

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
root@Pisang:~# reboot

Broadcast message from root@Pisang (pts/0) (Sat Oct 22 11:05:40 2016):

The system is going down for reboot NOW!
root@Pisang:~#

Na reboot:


root@Pisang:~# resize2fs /dev/mmcblk0p2
resize2fs 1.42.5 (29-Jul-2012)
Filesystem at /dev/mmcblk0p2 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/mmcblk0p2 is now 7852800 blocks long.

root@Pisang:~#

Met het commando df kun je checken wat de grootte van de partitie nu is (rootfs is bij mij nu 30918588 blokken van 1K, of ruim 30 GB)


Update en upgrade:

update en upgrade de lijsten met beschikbare applicaties
Geef het commando apt-get update  en dan  apt-get upgrade.  Dat laatste duurt wel een minuutje of wat.

Tijdzone:

Standaarinstelling is UTC.
dpkg-reconfigure tzdata 
Er verschijnt een window waarin je eerst kunt kiezen Europa en dan Amsterdam. Hierna moet de tijd goed staan.
Controleer met  date

Op tijd zetten na storing:
sudo /etc/init.d/ntp stop
ntpd -q -g

sudo /etc/init.d/ntp start


Krusader:

Krusader is een grafische 2-panelen file manager (bestandsbeheerder) die erg verwant is aan Total Commander voor M$Windows en Norton Commander voor DOS. Ik zweer bij dergelijke file managers, maar er zijn ook andere mogelijkheden.
apt-get install krusader
Hierna kun je Krusader vanuit het terminal window starten met krusader &   De & zorgt ervoor dat het terminal window direct weer vrij komt, zonder de & blijft het window onbruikbaar totdat je krusader afsluit.
Opm: Er kan een foutmelding komen met een advies om export $(dbus-launch) uit te voeren. Dat werkte.
De eerste keer dat je Krusader draait vraagt het om wat instellingen. Accepteer de defaults.
Als je in het terminal window ingelogd bent als root (of met sudo of su) dan draait krusader ook als root en kun je ook beveiligde bestanden wijzigen.

Om bestanden op inhoud te vergelijken is er nog een ding nodig:  apt-get install kompare  

Zet een icoon voor Krusader op de dekstop:
Copieer (met Krusader F5, want nu is dat gemakkelijker) een .desktop bestand vanuit bijv. /home/bananapi/Desktop/ naar /root/Desktop/  Geef het de naam Krusader door langzaam dubbelklikken.
Edit die file met Krusader F4 zodat er komt te staan:

[Desktop Entry]
Version=1.0
Name=Krusader
Comment=File Manager
Exec=/usr/bin/krusader
Icon=/usr/share/icons/hicolor/32x32/apps/krusader_user.png
GenericName=file manager
Terminal=false
Type=Application

Als het goed is verschijnt het Krusader icoon automatisch op de desktop als je inlogt als root.
Als je hetzelfde bestand ook in /home/bananapi/Desktop/ zet krijg je het Krusader icon ook als je inlogt als bananapi, maar dan kun je geen beveiligde (sudo) operaties doen.
Verwijder de items die je niet nodig hebt uit de Desktop directories.

Noot: Zo af en toe komt er bij het gebruik van Krusader een foutmelding van Knotify. Ik heb nog niet kunnen uitvinden hoe je daar vanaf komt. Wegklikken.


Grafische interface komt op als root:

In /etc/lightdm/lightdm.conf  wijzig  autologin-user=root
Copieer uit /home/bananapi/Desktop de .desktop bestanden naar  /root/Desktop Dat gaat nu gemakkelijk met Krusader F5.

Na reboot en inloggen als root komt het frambozen logo op zonder icons.


Computer naam:

Verander desgewenst de naam van de computer met nano /etc/hostname  Bij mij heet 'ie nu Pisang. De naam wijzigt pas na reboot.


Wijzig de standaard gebruiker:

Niet strikt nodig, maar het maakt sommige dingen wat gemakkelijker. Password wijzigen is in alle gevallen nodig.
De standaard gebruiker is /home/bananapi  met password bananapi
Je kunt die laten bestaan, of verwijderen met  deluser --remove-all-files
Maak een nieuwe user aan met adduser nieuwe_user_naam
Geef 2 x een password voor deze user op. Daarna worden er nog wat overbodige gegevens gevraagd, antwoord met de entertoets.


Muis dubbelklik snelheid:

Standaard staat de dubbelkliktijd erg kort ingesteld en standaard methodes als met de OpenBox configurator obconf werken niet.
Wat wel werkt is dit: Maak in het home directory /root  en/of  /home/<jouwgebruikersnaam> een tekst bestandje .gtkrc-3.0 en zet daarin de tekst: gtk-double-click-time=500


Vast IP adres:

Dat is niet strikt nodig, maar het voorkomt wat problemen. Met vaste IP adressen kun je iedere computer in je netwerk uniek benaderen. Dat kan ook met variabele IP-adressen, maar dan moet je overal de naam van de computer gebruiken.

Ik heb mijn ADSL-modem zo geconfigureerd dat hij de adressen 1 t/m 199 als vaste IP's beschouwt en 200+ uitdeelt als DHCP. Zie de handleiding van je modem/router voor hoe je dat instelt.

Edit het bestand /etc/network/interfaces  zodat het er zo uitziet:

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.2.182
gateway 192.168.2.254
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255

Vul de waardes van jouw eigen netwerk in. Het stuk 192.168.2 kan bij jou anders zijn, en het adres van de server (hier 182) kun je vrij kiezen.
Geef na het editen de commando's  ifdown eth0  en ifup eth0   om de nieuwe configuratie effectief te maken.
Test met ifconfig -a  of alles doorgekomen is.


SSH

SSH is nodig als je vanaf andere computers wilt kunnen inloggen op je server voor onderhoud.

SSH is al aanwezig in de standaard installatie. Probeer vanaf een andere computer in te loggen met bijv. putty. Kies ssh als protocol en geef het ip-adres van je server op. Je moet nu kunnen inloggen als gebruiker met het gebruikerspassword en als root met het rootpassword.

Disable telnet. Telnet is een ouderwets protocol om in te loggen via een telefoonmodem en een simpele terminal. De verbinding is niet beveiligd.
Verifieer dat telnet toegang niet mogelijk is: apt-get remove telnet. Waarschijnlijk was het er niet en dat vertelt de foutmelding dan wel.


Samba

Samba is nodig als er ook MS-Windows computers contact moeten kunnen maken met je server.
Samba kent ongeloofelijk veel opties om de Linux en Windows werelden met elkaar te laten praten. Denk maar eens aan belangrijke verschillen als het toegangsbeheer, het feit dat in Linux paden en bestandsnamen hoofdlettergevoelig zijn en die in Windows niet, en nog een heleboel andere dingen.
Toch kan toegang vanuit Windows computers met een vrij eenvoudige configuratie gerealiseerd worden.   

Op de server:  apt-get install samba samba-common-bin -y

Ga naar de samba configuratie: cd /etc/samba
Maak voor de zekerheid een copie van het originele samba configuratiebestand: cp smb.conf  smb.conf.org
Wijzig het bestand /etc/samba/smb.conf zodat er staat: (dit is het complete bestand zoals het nu bij mij is)

[global]
  workgroup = WORKGROUP        // Dit is meestal de standaard werkgroep voor windows computers
  server string = Pisang      // kies je eigen naam voor hoe de server zich meldt in het netwerk
  dns proxy = no
  log file = /nfsexport/Logs/samba/log.%m   // Ik heb de logfiles gezet op een plek die ook geëxporteerd wordt
  max log size = 1000
  read only=no
  security = user
  encrypt passwords = true
  lanman auth = yes
  client lanman auth = yes
  dnsproxy = no
  follow symlinks = yes
  wide links = yes
  unix extensions = no
  mangle prefix=6
  interfaces = 192.168.2.0/24 10.1.0.1   // Aanpassen aan je eigen netwerk. Die 10.1.0.1 is voor het VPN. Zie aldaar.

[Homes]
  browseable = yes
  read only = no
  create mask = 0777        // iedereen mag alles
  directory mask = 0777
    (dit pad heb ik tijdelijk gebruikt om met een windows PC toegang te krijgen tot het hele bestandsysteem, voor configuratie doeleinden.
    Daarna is het uitgecommentarieerd
  #path = /
         
  path= /nfsexport
  guest ok = no

# testen met testparm
# herstarten met service samba restart

De opdracht testparm test de syntax van configuratie, doet verder niets. Als die geen foutmeldingen geeft kun je samba herstarten met service samba restart

Windows computers kunnen alleen toegang krijgen na het invoeren van een samba gebruikersnaam en password.
Zet een samba gebruiker en password:  smbpasswd -a gebruikersnaam en vul dan twee keer een geschikt password in.
Deze combinatie heb je op de windows computers nodig om toegang te krijgen.

Zie ook man samba


Harddisk

De BananaPi heeft een SATA aansluiting die direct geschikt is voor een 2.5" harddisk (laptop formaat) en via een apart kabeltje gevoed wordt met 5 Volt uit de banaan. Er zijn hiervoor speciale kabeltjes te koop. (Dit vereist waarschijnlijk een zwaardere voeding, mogelijk gaat dat niet via de USB-voedingsaansluiting)
Als je -zoals ik- een 3.5" HD wilt gebruiken is er een extra 12-Volt voeding nodig. Ik heb in mijn rommelbak een voeding gevonden die 5 Volt en 12 Volt levert, zelfs met de juiste stekkers. Een andere mogelijkheid is een voedingsunit uit een afgedankte PC (o.m. volop te vinden op vrije markten en in HackerSpaces)

Configureren van de harddisk.
(Ik ga ervan uit dat je een HD hebt die reeds geformat is als ext4 en data bevat.) 
Bij het opstarten blijkt er geen automatische mount plaats te vinden, en lshw (list harware) werkte niet.
(je kunt het lshw command installeren met apt-get install lshw)
Met ls -l /dev/disk/by-uuid kwam ik de code van de harddisk te weten, in mijn geval  61e4306f-fa2b-48c3-9dc0-3cbb348fca83 voor sda1.
Voor elke HD zal dit anders zijn, maar het principe blijft.
Maak een mountpoint voor de HD: mkdir /mnt/MyDisk     MyDisk is een naam voor jouw Harddisk. Bij mij heet 'ie sd4t2.
Voeg in bestand /etc/fstab toe de regel:

UUID=<jouw UUID> /mnt/MyDisk ext4 errors=remount-ro 0 0
Geef het commando mount -a  en check met ls -al /mnt/MyDisk  of met Krusader dat de inhoud van de HD nu zichtbaar is in /mnt/MyDisk


NFS

NFS (Network File System) is nodig als er ook linux computers contact moeten kunnen maken met je server.
Op de server:
apt-get install nfs-common nfs-kernel-server 
Maak een export map: mkdir /nfsexport 
Om de inhoud van de harddisk te exporteren maken we een z.g. bind-mount.

edit /etc/fstab   en voeg een regel toe als:
/mnt/MyDisk  /nfsexport      none rw,bind 0 0

Geef hierna het commando mount -a
De mappen van de HD moeten nu zichtbaar zijn in /nfsexport

Configuratie van de nfs-server:  
Check dat in  /etc/default/nfs-common   staat (identiek met client)
# Do you want to start the idmapd daemon? It is only needed for NFSv4.
NEED_IDMAPD=yes
# Do you want to start the gssd daemon? It is required for Kerberos mounts.
NEED_GSSD=no

in /etc/default/nfs-kernel-server
NEED_SVCGSSD=no  

in  /etc/idmapd.conf:
[Mapping]
Nobody-User = nobody
Nobody-Group = nogroup

Nu moeten we de nfs server nog vertellen wat er geëxporteerd moet worden.
Edit:  /etc/exports
/nfsexport   192.168.2.0/255.255.255.0(rw,crossmnt,sync,fsid=0,nohide,insecure)
Verander de IP-adressen zonodig naar jouw groep.
Merk op dat de laatste 0 in 192.168.2.0 betekent dat alle computers met IP 192.168.2.xxx kunnen deelnemen.
Er zijn mogelijkheden om dat te beperken, maar dat behandel ik hier niet.
Na wijzigen geef commando  /etc/init.d/nfs-kernel-server restart    
Er kan een warning komen: Not starting, portmapper is not running
Geef dan: service rpcbind restart  Dit overleeft mogelijk een reboot niet. Doe dan:
update-rc.d rpcbind enable && update-rc.d nfs-common enable


Op de client
Installeer:  apt-get install nfs-common

Check dat in  /etc/default/nfs-common    staat (identiek met server):
# Do you want to start the idmapd daemon? It is only needed for NFSv4.
NEED_IDMAPD=yes
# Do you want to start the gssd daemon? It is required for Kerberos mounts.
NEED_GSSD=no

Maak mountpoint, bijv: mkdir  /nfsimport


Maak een entry in  /etc/fstab: om het geimporteerde filesysteem te mounten.
# mount remote filesystem
192.168.2.182:/nfsexport /nfsimport nfs rsize=8192,wsize=8192,timeo=14,intr 0 0
Wijzig het IP adres naar jouw situatie.
Geef het commando mount -a  en check met ls /nfsimport  of met Krusader dat de inhoud van de import nu zichtbaar is in /nfsimport


Apache2

Apache2 is nodig als je 1 of meerdere websites aan de wereld wilt tonen.
Apache is een uiterst complex geheel met extreem veel mogelijkheden. Ik geef hier alleen de instellingen die ik gemaakt heb om alles wat op de harddisk in de map WAN staat beschikbaar te maken voor de hele wereld en omstreken. Ik kan niet van elk configuratie-item uitleggen wat het doet en waarom het er zo staat, maar dit werkt, anders kon je dit niet lezen.

Ik gebruik uitsluitend niet-interactieve statische webpagina's die niet op een CMS (Content Management System) berusten.
Als je interactieve pagina's gebruikt wordt het wellicht ingewikkelder.

Installeren: apt-get install apache2
Apache komt met een default website. Test dat: Ga met de browser op een andere computer naar 192.168.2.182  Je moet dan die testsite zien.
De default weblocatie is /var/www en daar staat een testpagina. Ga met je browser naar het IP nummer van de server en test dat.

Maar wellicht wil je de sites op je harddisk zichtbaar maken.
Zorg dat de web inhoud minimaal 755 als permissie heeft
Configuratie in   /etc/apache2/apache2.conf (niets gewijzigd) 

Default virtual host in  /etc/apache2/sites-available/default  en  ..../sites-enabled/000-default (mogen identiek zijn)

<VirtualHost *:80>
   ServerAdmin webmaster@localhost
   DocumentRoot /nfsexport/WAN      // dit wil ik zichtbaar maken

   <Directory /nfsexport/WAN>
      Options Indexes FollowSymLinks MultiViews
      AllowOverride None
      Order allow,deny
      allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
       AllowOverride None
       Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
       Order allow,deny
       Allow from all
     </Directory>

     ErrorLog /nfsexport/Logs/apache2/error.log
     # Possible values include: debug, info, notice, warn, error, crit,

     # alert, emerg.
     LogLevel warn
     CustomLog /nfsexport/Logs/apache2/access.log combined
</VirtualHost>

Apache levert een forse hoeveelheid logging op. Het lijkt me verstandig om dat niet te doen in een map op de SD-kaart, want die kaarten hebben een beperkte hoeveelheid wis/schrijf capaciteit.
Wijzig in de file /etc/apache2/envars   het pad voor de logfiles.
Wijzig de regel:  export APACHE_LOG_DIR=/nfsexport/Logs/apache2$SUFFIX
Zorg dat het pad  /nfsexport/Logs/apache2  bestaat. Op de Harddisk is het dan /Logs/apache2/

Apache herstarten met /etc/init.d/apache2 restart  maar service apache2 restart werkt ook

Test eerst via een interne link of het nu werkt:  Ga met je browser naar het IP nummer van de server:
  http://192.168.2.182/jouwwebpagina.htm   

Om de rest van de wereld toegang te geven tot je site(s) moet poort 80 op je ADSL modem/router doorgegeven worden aan de server.
Dat gaat met de NAT Port Mappng instellingen op de modem/router. Zie een voorbeeld onderaan.

En je moet op de één of andere manier aan de wereld vertellen dat je een website op je server hebt. Daarvoor moet je het IP nummer van je huisaansluiting weten. Je Internet ADSL modem kan je dat vertellen. Log in op je modem (zie gebruiksaanwijzing van de modem) het IP adres staat waarschijnlijk op de openingspagina.

Er is ook een andere manier om je te bereiken, elk internet IP adres heeft nl. ook een naam. Die kun je o.m. te weten komen via de site  www.grc.com
Klik op het "ShieldsUP!!" logo en dan 4 blokken lager op de pagina "Goto ShieldsUP!"

IPname.jpg

Zodoende is deze pagina via 2 wegen te bereiken:

Link via IP nummer:   http://81.204.228.232/JanBeeProjects/ServerPisang/ServerPisang.htm

Link via IP naam: http://ip51cce4e8.speed.planet.nl/JanBeeProjects/ServerPisang/ServerPisang.htm

Als je vanuit je huis zo'n link wilt testen werkt 1 van deze methodes soms niet. Het hangt ervan af of je modem de externe link netjes oplost. Bij mij doen ze het alle twee.


OpenVPN

OpenVPN is nodig als je vanuit elders veilige toegang tot je bestanden thuis wilt hebben.
OpenVPN kan diverse ingewikkelde vormen van beveiliging bieden met private- en publieke sleutels en certifikaten. Dat is wellicht nodig als het gaat om een bedrijf met veel buitenwerkers.
Voor mijn situatie waarin ik met slechts 1 laptop toegang wil hebben heb ik gekozen voor de meest eenvoudige vorm van beveiliging, die met een enkele statische sleutel en zonder certifikaten. Ja, als die laptop gestolen wordt moet ik als de wiedeweerga de static key van de server veranderen.

Wat doet OpenVPN precies?
OVPN creëert een z.g. tunnel tussen de server en de client. Die tunnel ziet eruit als een aparte groep IP-adressen die niet voorkomen op je thuisnetwerk en ook nergens op het openbare internet. Het verkeer via de tunnel is in beide richtingen versleuteld, zodat een luistervink er niets van kan bakken.
Die tunnel heeft (in dit geval) aan de serverkant het IPadres  10.1.0.1 en aan de clientkant 10.1.0.2

Website: https://openvpn.net/

Installatie op de server: apt-get install openvpn
Ga naar met cd /etc/openvpn naar de configuratiemap en maak een static key met:
openvpn --genkey --secret static.key
De key ontstaat in /etc/openvpn/  Deze key moet later ook naar de client(s) gecopieerd worden.

Configuratie op de server in: /etc/openvpn/server.conf   Dat is een nieuw aan te maken bestand
# Simple Example server
dev tun
ifconfig 10.1.0.1   10.1.0.2
secret /etc/openvpn/static.key
verb 3
log /etc/openvpn/ovpn.log  // of waar elders je de logfiles wilt hebben

Configuratie op de Client:
In mijn geval gaat het om een laptop die WXP draait. Voor andere M$W versies zal het niet erg anders zijn.
Voor Linux clients zie de site van OpenVPN

Installeer OpenVPN voor windows op de gebruikelijke manier.
Het configuratiebestand komt in C:\Program Files\OpenVPN\config

Er staat een voorbeeldbestand in C:\Program Files\OpenVPN\sample-config\Client.ovpn
Copieer dat bestand naar
C:\Program Files\OpenVPN\config\JouwNaam.ovpn
Geef het een geschikte naam, in mijn geval JanBee.ovpn (de extensie .ovpn moet blijven)
Edit(*) dat bestand zodat er komt:

# Simple Example remote
dev tun
remote 81.204.228.232    // IP adres van de internet aansluiting van de server (jouw huis-IP)
;remote 192.168.2.182     // voor testen binnenshuis, nu uitgecommentarieerd.
ifconfig 10.1.0.2   10.1.0.1
secret static.key
verb 3
#log "F:\\vpn\\ovpn.log"  // definieer wwar je de logfiles wilt hebben. Bij mij staan ze op de F: partitie.

Copieer het bestand  "static.key"  dat op de  server aangemaakt werd naar C:\Program Files\OpenVPN\config\static.key

Nu zou alles moeten werken. Test eerst binnenshuis. Op de client moet alles dat je server exporteert, hetzij via NFS of via Samba, nu zichtbaar zijn via het IP-adres 10.1.0.2 
Om vanuit de rest van de wereld toegang te krijgen tot je bestanden moet poort 1194 op je ADSL modem/router doorgegeven worden aan de server.
Dat gaat met de NAT Port Mappng instellingen op de modem/router. Zie een voorbeeld onderaan.

Opgemerkt:
 - Thuis werkt ping met LAN IP, maar niet met WAN-IP.
 - Aanvankelijk was er een probleem na het activeren van static.key, maar dat lijkt opgelost door in de server het volledige pad op te nemen.

Voeg aan /etc/samba/smb.conf toe:  interfaces = 192.168.2.0/24 10.1.0.1/24

(*) De standaard platte-tekst-editor van windows (notepad of kladblok) is een notoir kreupel ding dat vaak niet goed overweg kan met linux-achtige configuratiebestanden. Ik beveel Notepad-plus aan, een freeware ding dat je zo van het internet kunt plukken.


Port Mapping

Instellingen op mijn KPN modem/router. Bij andere modems/routers kan het anders gaan. Je moet wel dezelfde mapping instellen.
Poort 80 is voor Apache web-pagina's, poort 1194 is voor OpenVPN.

Gebruik voor het VPN het UDP protocol, beslist NIET TCP. Het internet is nl. al TCP en als je TCP over TCP stuurt kan dat ernstige vertragingen opleveren.
Achtergrond: TCP doet aan opnieuw verzenden / opvragen van pakketjes als die wat laat aankomen. UDP niet.  Als je TCP over TCP doet gaat de tweede TCP-laag bij zo'n vertraging ook om opnieuw verzenden vragen en dat kan een opeenstapeling van herverzendings aanvragen opleveren.

NAT.jpg


ToDo:

Mailserver: Richt de server zodanig in dat 'ie mijn mail ophaalt, dat zichtbaar maakt op elke computer in huis en -via de VPN- elders in de wereld. Ook dat vanaf  iedere computer mail verstuurd kan worden, i.h.b. ook als ik via een willekeurige provider werk (op vakantie, bijv.)

OpenVPN: Zorg dat sommige apparaten op het netwerk ook van buitenaf benaderd kunnen worden. Bijv de Webif interface van de satelietontvanger


De snelle weg:

Om zelf een server in deze trant op te bouwen kun je het verhaal hierboven volgen, maar er is een wellicht snellere weg: Zorg dat je in het bezit komt van de juiste Banana-Pi en een SD-kaart van 16GB. Zorg dat ik die dingen krijg, dan maak ik een kloon van mijn server, test die op jouw banaan en verander een paar privacy instellingen en dan krijg je'm terug, gratis.

Ik verander de volgende privacy instellingen:
 - Het root password wordt blabla. Je kunt zelf een ander password instellen met passwd root
 - Het samba password wordt blabla. Je kunt zelf een ander password instellen met smbpasswd -a <gebruikersnaam>
 - Ik maak een nieuw static.key bestand voor het VPN. Je kunt zelf een nieuwe static.key maken (zie boven) zodat je zeker weet dat ik niet stiekem jouw key bewaar.

Wat je zelf tenminste nog moet doen is:
 - Je harddisk mounten. Zoek de UUID op en edit die in /etc/fstab
 - De indeling van je harddisk en de daarbijbehorende mountpoints in /etc/fstab  en exports in /nfsexport goed zetten.
 - Mogelijk IP adressen aanpassen. Zie boven.
 - De exports van de Apache webserver goed zetten.
 - Je modem/router configureren voor VPN en Apache.