Ülkemizde artık VPN’in ne olduğunu bilmeyen kalmamıştır 🙂 . Yasaklı sitelere erişmenin yanında VPN, bağlantımızı şifrelediği için umumi yerlerde kişisel verilerimizin güvenliğini koruma amaçlı da kullanılabilir. Bu yazıda Raspberry Pi kullanarak VPN üzerinden bağlantı kuran bir WiFi hotspot yapmayı anlatacağım. Bu proje, Linux’a alışık olmayanlar ve terminal ile işlem yapmayı sevmeyenler için karmaşık gelebilir.

Not: VPN bağlantı kurmak istemeseniz dahi Raspberry Pi’nizi bu rehberi kullanarak kablosuz erişim noktasına dönüştürebilirsiniz. Sadece OpenVPN ile ilgili kısımları atlamanız yeterlidir.

Öncelikle ihtiyacımız olanlar:

Bu proje için en uygun işletim sisteminin Raspbian Minimal olduğunu düşünüyorum. Minimal imajda masaüstü bulunmadığından, daha az sistem kaynağı tüketecektir. Zaten Pi’mizde grafik masaüstü ortamına ihtiyaç duymayacağız.

İmajı indirip SD karta yazdıktan sonra raspi-config ile SD kartın tamamını kullanmasını sağlıyoruz. Ayrıca güvenlik açısından autologin’i kapatmanızı ve pi kullanıcısının şifresini değiştirmenizi öneririm.

OpenVPN İstemcisi Kurulumu:

openvpn istemcisini aşağıdaki komut ile kuruyoruz:

sudo apt-get install openvpn

Bir sonraki adımda, sunucumuzdan edineceğimiz client.ovpn dosyasını, Pi’mize kopyalamamız gerekiyor. Bu işlem için ben kişisel sunucumdan indirdiğim dosyayı WinSCP ile Raspberry Pi’ye kopyaladım. Autologin konfigürasyonunu indirmemiz daha mantıklı olacaktır, çünkü Pi’mizin açılışta VPN sunucumuza otomatik olarak bağlanmasını istiyoruz.

openvpn_console

Pi tarafında ise client.ovpn dosyasını, client.conf ismi ile /etc/openvpn klasörü altına taşıyoruz:

sudo mv client.ovpn /etc/openvpn/client.conf

openvpn_conf

Daha sonraki adımda

sudo nano /etc/default/openvpn

komutu ile OpenVPN varsayılan konfigürasyon dosyasını açıyoruz ve #AUTOSTART=”all” yazan satırın başındaki işaretini kaldırıyoruz:

OpenVPN istemicimizin ayarları tamam. İstemcinin daemon olarak başlangıçta çalışması için

sudo systemctl enable openvpn

komutunu veriyoruz. Sistemimizi yeniden başlatıp ip adresimizi şu komutla kontrol edebiliriz:

wget -q -O - http://icanhazip.com/ | tail

Eğer VPN sunucumuzun adresini görüyosak, istemci sorunsuz olarak çalışıyor demektir.

WiFi Erişim Noktası Kurulumu:

Raspberry Pi’mizin VPN sunucumuza bağlanmasını sağladık. Şimdiki adımda bu bağlantıyı Pi üzerinden kablosuz şekilde dağıtacağız. Bunun için Pi’mizde bir DHCP sunucu (dnsmasq), WiFi erişim noktası programı (hostapd) ve bağlantıyı yönlendirebilmemiz için iptables yüklememiz gerekiyor:

sudo apt-get install hostapd dnsmasq iptables

Dikkat! Eğer RTL8188 çipsete sahip bir WiFi dongle kullanıyorsanız (örneğin TP-Link TL-WN725N) aşağıdaki adımları uygulamanız gereklidir. WiFi dongle’ınızın çipsetini öğrenmek için lsusb komutunu kullanabilirsiniz.

Bu adaptörü çalıştırmak için gerekli adımlar sırasıyla şu şekildedir:

wget http://www.daveconroy.com/wp3/wp-content/uploads/2013/07/hostapd.zip
unzip hostapd.zip 
sudo mv /usr/sbin/hostapd /usr/sbin/hostapd.bak
sudo mv hostapd /usr/sbin/hostapd.edimax 
sudo ln -sf /usr/sbin/hostapd.edimax /usr/sbin/hostapd 
sudo chown root.root /usr/sbin/hostapd 
sudo chmod 755 /usr/sbin/hostapd

WiFi erişim noktası konfigürasyonu için

sudo nano /etc/hostapd/hostapd.conf

komutunu veriyoruz ve açılan dosyaya aşağıdaki gibi konfigürasyonu giriyoruz:

interface=wlan0
driver=rtl871xdrv
ssid=RPi VPN Router
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=cokgizlisifre
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

Buradaki ssid=RPi VPN Router ve wpa_passphrase=cokgizlisifre satırlarını değiştirerek oluşturacağımız kablosuz ağın ismini ve bağlantıda kullanılacak şifreyi değiştirebilirsiniz.

hostapd_configuration_1

Sonraki adımda

sudo nano /etc/default/hostapd

komutu verip, bu dosyanın içerisindeki #DAEMON_CONF= satırını şu şekilde değiştiriyoruz:

DAEMON_CONF="/etc/hostapd/hostapd.conf"

Konfigürasyonu tamamladıktan sonra yine bu programın da başlangıçta çalışması için

sudo systemctl enable hostapd

komutunu veriyoruz.

DHCP Sunucu Kurulumu:

dnsmasq isimli program, Pi’mize kablosuz olarak bağlanan cihazlara otomatik olarak IP adresi verme görevini gerçekleştirecek. Konfigürasyon dosyasını

sudo nano /etc/dnsmasq.conf

komutu ile açıp, dosyanın en sonuna aşağıdaki satırları ekliyoruz:

server=8.8.8.8
server=8.8.4.4
no-dhcp-interface=eth0
addn-hosts=/etc/hosts.dns
dhcp-range=192.168.1.50,192.168.1.75,12h

Burada dikkat etmemiz gereken nokta, dhcp-range= olarak belirttiğimiz adres aralığının mevcut ağımızdan farklı bir subnet’e dahil olması. Yani Ethernet bağlantımız 192.168.2.x şeklinde IP adresine sahipse, bu aralığı 192.168.1.x şeklinde seçebiliriz.

Bu adımdan sonra bu programı da sistem açılışında çalışacak şekilde ayarlamak için şu komutu veriyoruz:

sudo systemctl enable dnsmasq

Sistemimize bağlı olan kablosuz ağ adaptörünün IP adresini sabitlememiz gerekiyor. Bunun için

sudo nano /etc/network/interfaces

komutunu vererek allow-hotplug wlan0, iface wlan0 inet manual ve wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf satırlarını siliyoruz. Onların yerine bu satırları ekliyoruz:

iface wlan0 inet static
    address 192.168.1.1
    netmask 255.255.255.0

Dosyanın son hali aşağıdaki gibi olmalıdır:

wlan0_ifconfig

Bu işlemden sonra,

sudo nano /etc/dhcpcd.conf

komutu ile açtığımız dosyanın en alt kısmına

interface wlan0
     static ip_address=192.168.1.1/24
     static routers=192.168.1.1
     static domain_name_servers=8.8.8.8,8.8.4.4

satırlarını ekliyoruz. dosyanın son hali şu şekilde olmalıdır:

dhcpd_conf

Dikkat: DHCP sunucu konfigürasyonu sırasında 192.168.1.x haricinde bir IP seti kullandıysanız, bu son iki adımdaki adresi ona karşılık düşecek şekilde değiştirmeniz gereklidir.

NAT Yönlendirme ve iptables:

Bu aşamaya kadar geldiysek, elimizde VPN sunucuya bağlanabilen ve kablosuz ağ üzerinden bağlanan cihazlara IP verebilen bir sisteme sahibiz demektir. Fakat, Pi üzerindeki internet bağlantısını kablosuz ağa yönlendirmediğimiz için, bu ağa bağlanacak cihazlar internet erişimine sahip olmayacaktır. NAT yönlendirmeyi sistem açılışında başlatmak için

sudo nano /etc/init.d/ip_forward

komutu ile bir başlangıç script dosyası oluşturuyoruz ve içine aşağıdaki satırları ekliyoruz:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          ip_forward
# Required-Start:    $remote_fs $syslog $network $openvpn
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

Not: Eğer VPN bağlantısı olmadan yanlızca WiFi erişim noktası yapmak istiyosanız, 

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

satırını

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

olarak değiştirin.

Bu komutun da sistem açılışında otomatik başlaması için

sudo chmod +x /etc/init.d/ip_forward
sudo systemctl enable ip_forward

komutlarını veriyoruz.

Eğer sabırlı bir şekilde adımların hepsini düzgün şekilde yaptıysak, Pi’mizi yeniden başlattığımızda diğer kablosuz cihazlar tarafından görünebilir durumda bir erişim noktası mevcut olmalıdır:

Screenshot_2016-03-26-12-32-34Screenshot_2016-03-26-12-32-49

12 Yorumlar

    • İnternet bağlantısı için bir modeme her zaman ihtiyacınız olacaktır. Fakat bağlantıyı dağıtma işlemini gören router yerine Pi’yi kullanabilirsiniz.

    • ufw ve iptables kullanarak yapabilirsiniz zannediyorum ama malesef firewall kurma konusunda herhangi bir tecrübeye sahip olmadığımdam malesef doğrudan yardımcı olamıyorum.

  1. İptablesi kurdum ama sistemi her restart ettiğimde tanımladıgım tüm kurallar sıfır lanıyor bu neden olur bir bilginiz varmı

  2. ben bu şekilde raspberry pi ile bir wifi araba yapmak istiyorum bu anlattığınız şekilde rpi yi wifi ile telefonuma bağlayarak ona komut gönderebilir miyim ?

    • Gönderebilirsiniz, fakat bahsettiğiniz uygulamanın bu proje ile alakası yoktur. Çok daha farklı bir yol izlemeniz gerekecektir.

  3. Raspberry Pi 3 ile bir ip-router yapılabildiğine göre ağdaki internet akışını kontrol eden ve log tutan bir cihaz yapılabilir sanırım. Tek problem bu iş için yeterli performans gösterip gösteremiyeceği. Bu konuda görüşlerinizi almak isterim.

    • İşlemci olarak 4 çekirdekli ARMv7 mimariye sahip BCM2837 entegresi yeterli gelecektir, fakat kart üzerindeki ethernet portu, diğer USB portları gibi tek port üzerinden dönüştürücü ile kullanıldığından performansı limitleyebilir. WiFi’de ise böyle bir limitleme bulunmamaktadır.

      • O halde bu projeyle ilgili kart seçerken araştırmam gereken nokta ethernet portu ve onun karta bağlantı mimarisi gibi görünüyor. Teşekkürler.

CEVAP VER