=== 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