Activer l'ipv4 forwarding

editer /etc/sysctl.conf

net.ipv4.ip_forward = 1

puis lancer :

sysctl -p

compilation de ppp

emerge -av ppp
net-dialup/ppp-2.4.4-r15  USE="gtk ipv6 pam -activefilter -atm -dhcp -eap-tls -mppe-mppc -radius"
(activer ipv6 et pam).

Modification du /etc/conf.d/net

config_tap0=( ``null'' )
config_eth0=("10.0.70.1/24")   
mtu_eth0="1492"
mtu_ppp0="1492"
routes_ppp0=( "::/0" )
config_ppp0=( "ppp" )
link_ppp0="eth0"
plugins_ppp0=("pppoe")
username_ppp0="nom.prenom@fdn.fr"
password_ppp0="password"
pppd_ppp0=("ipv6 ," "ipv6cp-use-persistent" "defaultroute" "maxfail 0" "persist")
ln -s net.lo /etc/init.d/net.ppp0
rc-update add net.ppp0 default
/etc/init.d/net.ppp0 start

firewall et iptables

emerge -av iptables
net-firewall/iptables-1.4.0-r1  USE="ipv6 -extensions -imq -l7filter -static"

Script de firewalling

#!/bin/bash
# REMISE à ZERO des règles de filtrage
iptables -F
iptables -t nat -F

# DEBUT des "politiques par défaut"
# Je veux que les connexions entrantes soient bloquées par défaut
iptables -P INPUT DROP

# Je veux que les connexions destinées à être forwardées
# soient acceptées par défaut
iptables -P FORWARD ACCEPT

# Je veux que les connexions sortantes soient acceptées par défaut
iptables -P OUTPUT ACCEPT

# FIN des "politiques par défaut"
# Pas de filtrage sur l'interface de "loopback"
iptables -A INPUT -i lo -j ACCEPT
#on ne filtre pas le vpn
iptables -A INPUT -i tap0 -j ACCEPT

# J'accepte le protocole ICMP (i.e. le "ping")
iptables -A INPUT -p icmp -j ACCEPT

# J'accepte le protocole IGMP (pour le multicast)
iptables -A INPUT -p igmp -j ACCEPT

# J'accepte les packets entrants relatifs à des connexions déjà établies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

#ssh (pour se connecter a sa machine a distance
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

#apache
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#https (si on heberge un serveur http ssl)
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

#tftp
#iptables -A INPUT -p udp --dport 69 -j ACCEPT

#mon smtp
iptables -A INPUT -p tcp --dport 25 -j ACCEPT

#vpn (si on heberge un HUB vpn)
#iptables -A INPUT -p tcp --dport 7777 -j ACCEPT

#forward de la connection
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS -o ppp0 --clamp-mss-to-pmtu

#Exemple de translation de port.
iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 5060 -j DNAT --to 10.0.70.20:5060
/home/$user/firewall.sh

on verifie

iptables -L

puis on enregistre

/etc/init.d/iptables save

On lance au boot

rc-update add iptables default

Installer un dhcpd

emerge -av dhcp
net-misc/dhcp-3.1.1  USE="-doc -minimal (-selinux) -static"
rc-update add dhcpd default

configuration du dhcpd

/etc/dhcp/dhcpd.conf

# dhcp.conf
# Sample DHCP Server Configuration File

# option definitions common to all supported networks...
option domain-name "mist.0n-0ff.info";
option domain-name-servers 4.2.2.4;

ddns-update-style none;

authoritative;

default-lease-time 86400;
max-lease-time 86400;

subnet 10.0.70.0 netmask 255.255.255.0 {
  range 10.0.70.10 10.0.70.199;
 option routers 10.0.70.1;
}
# example for a address that will bee given to a fixed hardware (mac)
#host laptop {
#  hardware ethernet 00:10:5a:2e:56:a7;
#  fixed-address 192.168.2.4;
#  option routers 192.168.2.1;
#  option broadcast-address 192.168.2.255;
#}
/etc/init.d/dhcpd start

Configuration du modem pour passer en mode bridger

Se referer a la doc de votre modem routeur.

Pour linksys am200, aller dans la conf ppp et choisir : bridge only.

Dans la conf changer l'ip du modem/routeur pour avoir : 10.0.70.254

relancer eth0 puis ppp0

/etc/init.d/net.eth0 restart
/etc/init.d/net.ppp0 restart

Script de surveillance de connexion web

Rien de plus agaçant que d'être chez un ami, d'avoir besoin d'un fichier; et la notre connexion ppp est tombé ou alors le modem a planté et n'est pas reparti … Ce petit script relancera net.ppp0 si jamais votre connexion est tombé pour quelque raison que ça soit.

#!/bin/bash
SERVERS=irc.geeknode.org
STATUS_LINK=0
USER=`id -u`
if [ ! "$USER" = "0" ];
then
  echo "you're not root, you can't check adsl."
  exit
fi
if [ -f /var/run/checkadsl ]
then
  echo already running
  exit
fi
if ! /sbin/ifconfig ppp0 > /dev/null
then
  echo "No pppd running. Restarting NOW."
  killall pppd
  /etc/init.d/net.ppp0 restart
  exit
fi
touch /var/run/checkadsl
## recupere l'ip du peer
ip=$(/sbin/ifconfig  ppp0 | /bin/grep "P-t-P" | /usr/bin/cut -d":" -f3 | /usr/bin/cut -d" " -f1)
SERVERS=$ip
for i in $SERVERS;
do
  ping -c 3 $i 
#1>/dev/null 2>/dev/null
  if [ "$?" = "0" ];
  then
    STATUS_LINK=1
    rm -f /var/run/checkadsl
    echo "exit c est ok on passe au deuxieme test"
  exit 0
  fi
done
if [ "$STATUS_LINK" = "0" ];
then
  echo "ADSL Link DOWN. Restarting NOW."
  /etc/init.d/net.ppp0 restart
  rm -f /var/run/checkadsl
fi
rm -f /var/run/checkadsl

L'ideal est de lancer ce script toutes les 5minutes grace a cron, ainsi vous aurez une connexion tout le temps “up”.

crontab -e
*/5 * * * * /root/ppp/run 2>1 /dev/null

Facultatif mais super FUN : Anoncer son reseau sur le VPN

emerge -av quagga
net-misc/quagga-0.99.10-r1  USE="ipv6 pam -bgpclassless -caps -multipath -ospfapi -realms -snmp -tcp-zebra -tcpmd5"

rappel : a ce stade les interfaces reseaux de votre workstation routeur doivent ressembler a ça :

eth0      Link encap:Ethernet  HWaddr 00:17:31:56:B2:F7  
        inet addr:10.0.70.1  Bcast:10.0.69.255  Mask:255.255.255.0
        inet6 addr: fe80::217:31ff:fe56:b2f7/64 Scope:Link
        UP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1
        RX packets:44479678 errors:0 dropped:0 overruns:0 frame:0
        TX packets:32260931 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000 
        RX bytes:44521304979 (42458.8 Mb)  TX bytes:7311609502 (6972.8 Mb)
        Interrupt:23 Base address:0x6000 

lo        Link encap:Local Loopback  
        inet addr:127.0.0.1  Mask:255.0.0.0
        inet6 addr: ::1/128 Scope:Host
        UP LOOPBACK RUNNING  MTU:16436  Metric:1
        RX packets:237729 errors:0 dropped:0 overruns:0 frame:0
        TX packets:237729 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:0 
        RX bytes:33482701 (31.9 Mb)  TX bytes:33482701 (31.9 Mb)

ppp0      Link encap:Point-to-Point Protocol  
        inet addr:x.x.x.x  P-t-P:62.4.16.251  Mask:255.255.255.255
        inet6 addr: fe80::217:31ff:fe56:b2f7/10 Scope:Link
        UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1450  Metric:1
        RX packets:6185938 errors:0 dropped:0 overruns:0 frame:0
        TX packets:3599655 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:3 
        RX bytes:6160670841 (5875.2 Mb)  TX bytes:494308860 (471.4 Mb)

tap0      Link encap:Ethernet  HWaddr 00:FF:0B:17:C5:A4  
        inet addr:10.0.1.2  Bcast:10.0.1.255  Mask:255.255.255.0
        inet6 addr: fe80::2ff:bff:fe17:c5a4/64 Scope:Link
        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RX packets:1632910 errors:0 dropped:0 overruns:0 frame:0
        TX packets:875556 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:100 
        RX bytes:2056597963 (1961.3 Mb)  TX bytes:63761577 (60.8 Mb)

Vous êtes donc connecté via tap0 au vpn.

Votre interface eth0 est sur un autre subnet que le vpn.

Vous pouvez annoncer votre reseau dans le vpn : ainsi toutes les machines de votre reseau seront visible depuis le vpn !

Rappelons que toutes les machines de votre reseau peuvent déjà sans client vpn accéder au vpn puisque votre nouvelle workstation/routeur partage sa connexion au vpn.

 /etc/quagga/zebra.conf
! -*- zebra -*-
!
! zebra sample configuration file
!
! $Id: zebra.conf.sample,v 1.1.1.1 2002/12/13 20:15:30 paul Exp $
!
hostname mist
password unMDP
enable password unMDP
!
! Interface's description. 
!
!interface lo
! description test of desc.
!
!interface sit0
! multicast

!
! Static default route sample.
!
!ip route 0.0.0.0/0 203.181.89.241
!

!log file zebra.log
rc-update add zebra default
/etc/init.d/zebra start

On passe a la configuration de bgpd.

/etc/quagga/bgpd.conf
!
! Zebra configuration saved from vty
!   2008/09/18 09:34:32
!
hostname mist
password unMDP
enable password unMDP
log stdout
!
rc-update add bgpd default
/etc/init.d/bgpd start

contactez maintenant votre administrateur reseau !

telnet localhost bgpd
enable
conf ter
show run
router bgp ASnumber
bgp router-id 10.0.70.1
network 10.0.70.0/24
neighbor 10.0.1.1 remote-as 64048
copy run start
logout
sh ip bgp sum
Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
10.0.1.1        4 64048   20719   20426        0    0    0 3d04h56m       44

Ici l'on voit que j'apprend 44 prefix de 10.0.1.1, ainsi je sais comment joindre 44 reseaux supplémentaires.

Ainsi vous annoncez 10.0.70.0/24 sur le reseau via le routeur 10.0.1.1 (mais 10.0.1.1 doit être configurer pour recevoir la nouvelle route de votre routeur).

On peut verifier ensuite qu'on a bien apprit des routes via :

route -n