# Software > OpenWrt >  VPN client σε OpenWRT

## pvas

Μια και βρήκα λίγο χρόνο, είπα να προσπαθήσω να κάνω το ποταπό μου WRT54G με OpenWRT, να συνδέεται σαν client σε έναν VPN server του AWMN, και να routάρει όλα τα σχετικά requests από τα PCιά που έχω πάνω του, χωρίς να χρειάζεται να κάνω connect από αυτά.
Ακολούθησα λοιπόν το σχετικό tutorial και η ppp σύνδεση έγινε.

Αυτό που μένει, είναι να μπουν τα routes στο OpenWRT και στα PCιά που είναι από πίσω. Μπορείτε να μου δώσετε κατευθύνσεις πάνω σε αυτό;

----------


## trendy

Ποια routes θέλεις να βάλεις?
Τα vpn connections δρομολογούνται από μόνα τους, δε χρειάζονται routes.
Αν θέλεις να βάλεις ένα route για κάποιο static δικτυο η εντολή είναι ίδια με το linux.


```
route add -net 10.10.10.0/24 gw 10.10.10.1
```

Το βάζεις και σε ένα startup script (/etc/init.d/S....) και καθάρισες.

----------


## enaon

> Ποια routes θέλεις να βάλεις?
> Τα vpn connections δρομολογούνται από μόνα τους, δε χρειάζονται routes.
> Αν θέλεις να βάλεις ένα route για κάποιο static δικτυο η εντολή είναι ίδια με το linux.
> 
> 
> ```
> route add -net 10.10.10.0/24 gw 10.10.10.1
> ```
> 
> Το βάζεις και σε ένα startup script (/etc/init.d/S....) και καθάρισες.


Πρέπει το default route, ο δρόμος για το inet σαν να λέμε, να οριστεί αφού σηκωθεί το interface του vpn. Στο παράδειγμα που ακολούθησες, αυτό γίνετε με όμορφο τρόπο, ώστε inet να έχει το τοπικό σου subnet, και όχι όλοι όσοι κοιτούν τον router σου.

ip route add throw 10.0.0.0/8 table 10 #φτιάχνεις ενα ακόμα routing table, το ονομάζεις ΄'10' και λες ότι αν ο προορισμός είναι μέσα στο 10.0.0.0/8 να ερωτηθεί το main routing table, όχι το 10.
echo '/usr/sbin/ip rou add default table 10 via VPNIPADDR>> /tmp/ppp0up ###εδώ , βάζεις το default gateway μέσα στο ΄10΄
echo '/usr/sbin/ip rule add from x.x.x.x/x table 10'### και εδώ λες οτι αν το source είναι από το τοπικό σου δίκτυο, να ψάξουμε τον προορισμό στο table 10.

Αν λοιπόν κάτι έρχεται από εσένα, και δεν πάει στο awmn, θα το στείλει στο inet μέσω του vpn. 

Σου προτείνω να το κάνεις αντίστοιχα.

Αν ο vpn server δεν σου δίνει μόνιμη ip, θέλει μια δυο αλλαγές, θα τις ανεβάσω το συντομότερο.

----------


## trendy

enaon στo vpn connection των windows η vpn σύνδεση, ως τελευταία που καλέστηκε, παίρνει μικρότερο metric άρα και μεγαλύτερη προτεραιότητα. Οπότε για να δηλώσεις το ασύρματο δίκτυο απλώς βάζεις ένα route add 10.0.0.0 mask 255.0.0.0 getway_ip -p.
Στο vpn του wrt δεν ισχύει το ίδιο;

----------


## pvas

Το /24 δεν παίζει στην route (το βλέπει σαν name και προσπαθεί να κάνει resolve).

Το ip command απουσιάζει (προφανώς έρχεται με κάποιο ipkg που δεν έχω περάσει).

Επιπλέον, δεν καταλαβαίνω για ποιο λόγο να φτιάχνουμε tmp αρχεία κάθε φορά (με βάση το tutorial), και να μην τα φτιάξουμε μια φορά;

Τέλος, πολλές φορές όταν πέφτει το vpn (σύμφωνα με τον VPN server), το ifconfig εξακολουθεί να το εμφανίζει. Αν πάω να ξανασυνδεθώ, δημιουργείται ppp1, ppp2 κλπ. με την ίδια IP. Δε μπορώ να του πω manually να κάνει kill τον VPN client χωρίς να αφήνει υπολήμματα, και να ξεκινάει πάλι από το ppp0;

----------


## trendy

```
 route add -net 10.196.0.0 netmask 255.255.255.0 gw 10.176.4.156 dev vlan2
```

Έτσι παίζει!




> Τέλος, πολλές φορές όταν πέφτει το vpn (σύμφωνα με τον VPN server), το ifconfig εξακολουθεί να το εμφανίζει. Αν πάω να ξανασυνδεθώ, δημιουργείται ppp1, ppp2 κλπ. με την ίδια IP. Δε μπορώ να του πω manually να κάνει kill τον VPN client χωρίς να αφήνει υπολήμματα, και να ξεκινάει πάλι από το ppp0;


Το vpn στο linux έχει το φάκελο /etc/ppp/ όπου υπάρχουν τα scripts ip-up & ip-down για να του λες τι να κάνει όταν κόβεται μια σύνδεση. Δες μήπως τα έχει και εσένα.

----------


## enaon

> enaon στo vpn connection των windows η vpn σύνδεση, ως τελευταία που καλέστηκε, παίρνει μικρότερο metric άρα και μεγαλύτερη προτεραιότητα. Οπότε για να δηλώσεις το ασύρματο δίκτυο απλώς βάζεις ένα route add 10.0.0.0 mask 255.0.0.0 getway_ip -p.
> Στο vpn του wrt δεν ισχύει το ίδιο;


Τα windows μόλις ανοίγεις vpn,dialup κλπ, προσθέτουν ενα default gateway προς τον server αυτόματα, με χαμιλό metric. Ετσι βάζουμε ενα 
route add -p 10.0.0.0 mask 255.0.0.0 10.x.x.x ωστε να πάνε τα 10.0.0.0/8 πρός τον κόμβο του awmn, και είμαστε οκ.

Το linux μπορεί να κάνει το ίδιο, και καλύτερα, αλλά πρέπει να του το πεις, δέν το κάνει αυτόματα.




> Το ip command απουσιάζει (προφανώς έρχεται με κάποιο ipkg που δεν έχω περάσει).
> 
> Επιπλέον, δεν καταλαβαίνω για ποιο λόγο να φτιάχνουμε tmp αρχεία κάθε φορά (με βάση το tutorial), και να μην τα φτιάξουμε μια φορά;
> 
> Τέλος, πολλές φορές όταν πέφτει το vpn (σύμφωνα με τον VPN server), το ifconfig εξακολουθεί να το εμφανίζει. Αν πάω να ξανασυνδεθώ, δημιουργείται ppp1, ppp2 κλπ. με την ίδια IP. Δε μπορώ να του πω manually να κάνει kill τον VPN client χωρίς να αφήνει υπολήμματα, και να ξεκινάει πάλι από το ppp0;


Το ip καλό είναι να το βάλεις, τέχει τις policy routing εντολές. Μπορείς να το παρακάμψεις με το mangle στο iptables. 
Το αρχεία τα δημιουργούμε στο /tmp, γιατί εκεί είναι η μνήμη και μπορούμε να γράφουμε και να σβήνουμε όσο θέλουμε. Κρατάμε το αρχικό στο /etc/init.n/S90vpn για να είναι το δυνατό απλούστερο. Κάνουμε περίπου ότι κάνουν και τα windows, αλλά καλυτέρα. Πρέπει να δημιουργήσεις 2 -3 αρχεία. Πρέπει να τα τρέξεις αφού σηκωθεί το bgp, και έρθουν τα routes για τον server που θες να συνδεθείς. Πρέπει να βάλεις το gateway αφού σηκωθεί το vpn. Πρέπει να βάλεις το nat μετά. Αν πας να τα απλώσεις νομίζω θα γίνει πολύ πιο μπερδεμένο.

Με το /tmp/vpnoff πχ, θα μπορούσες να κλείσεις την σύνδεση, κάνοντας και τα υπόλοιπα που πρέπει (pptp, nat..). Θα σου πάρει λίγο παραπάνω να το φτιάξεις, αλλά θα είναι μαζεμένο και εύχρηστο σχετικά. Μην το κάνεις ίδιο αν δεν θές, η φιλοσοφία νομίζω συμφέρει όμως.

----------


## enaon

> ```
>  route add -net 10.196.0.0 netmask 255.255.255.0 gw 10.176.4.156 dev vlan2
> ```
> 
> Έτσι παίζει!


Σίγουρα παίζει έτσι, το gateway discovery του linux βρίσκει το gateway αυτόματα αφού του είπαμε iface( θέλει και masquarade, αν δεν κάνει η άλλη πλευρά). Το gateway μπαίνει όμως στο main table. Αν το wrt είναι στο εσωτερικό δίκτυο, όλα καλά, ωραίο είναι. Αν είναι στον κορμό του awmn, με ρόλο δρομολογητή, καλό είναι να γίνει όπως λέει στο tutorial νομίζω.

----------


## trendy

> Αρχική Δημοσίευση από trendy
> 
> 
> 
> ```
>  route add -net 10.196.0.0 netmask 255.255.255.0 gw 10.176.4.156 dev vlan2
> ```
> 
> Έτσι παίζει!
> ...


Δεν έχω δοκιμάσει να κάτσω vpn πάνω σε router οπότε δε διαφωνώ. Aπάντησα στον pvas περισσότερο για το πώς μπαίνει static route στο wrt. Δεν ήξερα ότι περιπλέκεται τόσο η κατάσταση με τα routes.

----------


## Ernest0x

> Τέλος, πολλές φορές όταν πέφτει το vpn (σύμφωνα με τον VPN server), το ifconfig εξακολουθεί να το εμφανίζει. Αν πάω να ξανασυνδεθώ, δημιουργείται ppp1, ppp2 κλπ. με την ίδια IP. Δε μπορώ να του πω manually να κάνει kill τον VPN client χωρίς να αφήνει υπολήμματα, και να ξεκινάει πάλι από το ppp0;


Δοκίμασε:


```
prompt$ ifconfig ppp0 down
prompt$ kill -9 `pidof pppd`
```

Αν το pidof δεν παίζει στο openwrt, το δίνεις βρίσκεις με ps.

Όταν ξανασηκώσεις το vpn πρέπει λογικά ν' αρχίσει πάλι απ' το ppp0.

Πάντως μπορείς να πάρεις το pppX και realtime και να το αποδίδεις σε κάποια variable μέσα σε shell script. 
π.χ.


```
PPP_IFNAME=`ifconfig | grep -o ppp.`
ifconfig $PPP_IFNAME down
...
```

Το παραπάνω παίζει με την προυπόθεση ότι το grep του linksys υποστηρίζει το -ο option και ότι έχεις ένα tunnel up.

----------


## pvas

Έβαλα το package του ip, έπαιξα λίγο και με τα scriptάκια, αλλά νομίζω θα καταλήξω στις παρακάτω γραμμές:




```
insmod ppp_mppe_mppc
insmod ppp_async

pptp [IP του VPN Server] user [Username] password [Password] refuse-eap +mschap-v2nomppe-stateful require-mppe-128 noauth

route add default gw [Gateway του VPN]
route add -net 10.0.0.0 netmask 255.0.0.0 gw [Gateway του WRT54G]
route del default gw [Gateway του WRT54G]

iptables -t nat -A POSTROUTING -o ppp0 -s [IP του PC πίσω από το WRT54G] -d ! 10.0.0.0/8 -j SNAT –to [IP που παίρνει από το VPN]
```

----------

