Raspberry PiでSurfshark VPNルーターを作る【buster】

Raspberry Piを通過する全ての通信がSurfshark(OpenVPN)を経由するクライアントルーターを作ります。

 

今回は無線(wlan0)で接続を受けて有線(eth0)でインターネット側へ通信するアクセスポイント型にしました。



使ったもの
  • raspberry pi 4 model B / 2GB
  • microSD 16GB (imagerでRaspiOSインストール済み)
  • Surfshark契約アカウント

  • ※OSはbuster(Debian10)でのみ動作します。
    bullseyeではiptables周りの変更があったので後述のやり方では通信出来ないです。


    OpenVPNをインストール

    ターミナルを開き、最新版にアップデートしておきましょう。
    sudo apt update
    sudo apt upgrade

    OpenVPNと解凍ソフトをインストール
    sudo apt install openvpn unzip
    

    OpenVPNフォルダに移動し、Surfsharkから構成ファイルのアーカイブをダウンロード
    cd /etc/openvpn
    sudo wget https://my.surfshark.com/vpn/api/v1/server/configurations

    解凍後、アーカイブは邪魔なので削除
    sudo unzip configurations
    sudo rm configurations

    リストコマンドを実行すると、各国別.ovpnファイルがある筈なので
    好きなプロトコル(TCP/UDP)とサーバーを選びます。
    今回はUDPでコロンビアのサーバーを選んでみます。
    ls
    sudo openvpn co-bog.prod.surfshark.com_udp.ovpn

    念の為、VPNに繋がる事を確認しましょう。 手動接続用のユーザー名とパスワードはhttps://my.surfshark.com/vpn/manual-setup/routerから確認出来ます。
    後で使うので取っておきましょう。




    OpenVPNが自動実行するよう設定する

    nanoエディタで以下のファイルを編集し
    sudo nano /etc/openvpn/auth.txt

    Surfsharkの手動接続用ユーザー名とパスワードを記述し保存します。
    Username
    Password
    以上の記述のみでOKです。

    次は使用する構成ファイルをコピーして、そのコピーに別の名前と拡張子を付ける必要があります。 
    今回はco-bog.prod.surfshark.com_udp.ovpnを使うので、
    sudo cp /etc/openvpn/co-bog.prod.surfshark.com_udp.ovpn /etc/openvpn/co-bog.conf
    とします。 .confにするのはOpenVPNソフトウェアの仕様です。

    そしてコピーした構成ファイルを編集します。   
    sudo nano /etc/openvpn/co-bog.conf
     
    以下の記述を探して
    auth-user-pass
     
    先ほどのユーザー名とパスワードを記述したファイルをスペースして追加します
    auth-user-pass auth.txt
     
    次は以下のファイルを編集します。
    sudo nano /etc/default/openvpn
     
    以下の記述がある筈なので
    #AUTOSTART="all"
     
    先ほど名前を変えたファイル名を拡張子を除いて記述し、#を外す。
    AUTOSTART="co-bog"

    その後、OpenVPNを有効にする
    sudo systemctl enable openvpn
     
    再起動して自動実行できているか確認しましょう
    sudo reboot




    DHCPの設定をする

    まず先にDHCPを設定します。
    sudo nano /etc/dhcpcd.conf
     
    以下を追加しましょう。
    interface wlan0
    static ip_address=172.16.1.1/24
    nohook wpa_supplicant
    
    interface eth0
    static domain_name_servers=1.1.1.1  #若しくは8.8.8.8
    IPは適当なので任意で変更して下さい。
    nohook wpa_supplicantは必ず記述しないとwlan0がアクセスポイントとして動作してくれません。
    DNSに関しては変に9.9.9.9(Quad9)や208.67.222.222(OpenDNS)等にしてしまうとリークしますので
    必ず1.1.1.1(Cloudflare)か8.8.8.8(GoogleDNS)にしましょう。
    そして再起動して設定を反映します。
    sudo reboot

    念の為、ブラウザを開いて以下のサイト等でリークテストしましょう。
    https://surfshark.com/dns-leak-test 
    ※↑公式ですがDNSにSurfsharkVPNのIPさえ含まれていれば、他のDNSが生IPもろ出しでもOK判定を出すガバガバ仕様なので注意
    https://www.dnsleaktest.com/

    次はDnsmasqをインストールしてwlan0側のDHCP範囲を設定していきます。
    sudo apt install dnsmasq
    sudo nano /etc/dnsmasq.conf
     
    以下の記述を追加します。
    interface=wlan0
    dhcp-range=172.16.1.10,172.16.1.100,255.255.255.0,24h
    ちなみにこちら側でDNS設定(server=1.1.1.1)する事も可能ですが、 結局/etc/dhcpcd.confに干渉するのでしなくていいです。




    hostapdでアクセスポイントを構築

    hostapdをインストールして設定していきます。
    sudo apt install hostapd
    sudo nano /etc/hostapd/hostapd.conf

    以下の記述を追加
    interface=wlan0
    driver=nl80211
    ssid=RaspberryPiVPN
    wpa_passphrase=raspberrypasswd
    hw_mode=g
    channel=6
    wmm_enabled=0
    macaddr_acl=0
    auth_algs=1
    wpa=2
    wpa_key_mgmt=WPA-PSK
    rsn_pairwise=CCMP
    
    SSIDとパスワードは任意です。
    チャンネルも状況によって変更をお願いします。
     
    その後以下のファイルを編集
    sudo nano /etc/default/hostapd

    以下の記述を探す
    #DAEMON_CONF=""

    #を外して、先ほどの設定ファイルを指定して保存。
    DAEMON_CONF="/etc/hostapd/hostapd.conf"


    再起動してアクセスポイントが出来ているか確認しましょう。
    ちなみに今の状態でアクセスポイントに接続してもネットには繋がらない筈です。




    iptablesで全ての通信をOpenVPN経由にする

    まずデフォルトではパケット転送自体が出来ないのでカーネルパラメータを編集します。
    sudo nano /etc/sysctl.conf

    以下の記述を探し
    #net.ipv4.ip_forward=1

    #を外す事でインターフェース間のパケット転送が可能になります。
    net.ipv4.ip_forward=1

    次にiptablesで転送ルールを設定します。
    以下のパッケージをインストールします。
    sudo apt install iptables-persistent

    通過する通信全てをiptablesでOpenVPNのインターフェースtun0経由にします。
    sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
    sudo iptables -A FORWARD -i tun0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
    sudo iptables -A FORWARD -i wlan0 -o tun0 -j ACCEPT
     
    そして、ルールが永続的に有効になるように保存します。
    sudo netfilter-persistent save

    再起動してアクセスポイントに接続しましょう。
    全てがVPN経由になっている筈です。
    お疲れさまでした。


    コメントを投稿