web-dev-qa-db-ja.com

VPNを使用したアクセスポイントとしてのラズベリーパイ

自宅にいるときに電話をオフィスネットワークに接続する必要があります。電話にVPNクライアントをインストールすることはオプションではありません。私はこのチュートリアルに従って、rpiで動作するアクセスポイントを取得しました。

アクセスポイントとして機能するようにRaspberryPiを構成します: https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md

チュートリアルの指示に従ってブリッジ(wlan0とeth0の間のbr0)を作成する代わりに、iptablesを使用して転送を行いました。

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

これはかなりうまく機能しますが、VPNに接続すると機能しません。 iptablesコマンドのさまざまな組み合わせを試しましたが、完全に機能しているものはないようです。これが私が試したいくつかの組み合わせです:

enter image description here

私が達成したいのは:

enter image description here

  • ここでの「vpnworks」とは、rpi(アクセスポイント)に接続されたデバイスがオフィスのWebサイトにアクセスできることを意味します。
  • ここでいう「インターネットが機能する」とは、rpi(アクセスポイント)に接続されたデバイスが一般的にインターネットにアクセスできることを意味します。
  • Vpncを使用してvpnに接続しています。

$ルート

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         *               0.0.0.0         U     0      0        0 tun0
default         ralink.dlink.co 0.0.0.0         UG    202    0        0 eth0
10.20.30.40     *               255.255.255.255 UH    0      0        0 tun0
192.168.0.0     *               255.255.255.0   U     202    0        0 eth0
192.168.1.0     *               255.255.255.0   U     303    0        0 wlan0
as-40816.abc    ralink.dlink.co 255.255.255.255 UGH   0      0        0 eth0

[05/05/2018]セットアップが機能し始めた後、ルーティングテーブルを更新しました:

これは、VPNサーバーを別のホストに変更したときです

$ route -n(Host2)

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.0.1     0.0.0.0         UG    202    0        0 eth0
10.0.0.0        *               255.0.0.0       U     0      0        0 tun0
10.104.26.116   *               255.255.255.255 UH    0      0        0 tun0
150.11.0.101    *               255.255.255.255 UH    0      0        0 tun0
150.11.0.102    *               255.255.255.255 UH    0      0        0 tun0
102.191.24.21   192.168.0.1     255.255.255.255 UGH   0      0        0 eth0
192.168.0.0     *               255.255.255.0   U     202    0        0 eth0
192.168.1.0     *               255.255.255.0   U     303    0        0 wlan0
4
Gautam

あなたの例はtunデバイスを示しているので、ルーティングのみを使用する必要があります。 Raspbian Stretch Lite 2018-04-18 を使用します。アイデアは、余分なものなしで静的な最小構成をセットアップすることです。 dhcp serverかそこら。ルーティングが機能する場合は、段階的に拡張できます。

Raspbianのデフォルトのネットワークは、特に複雑なセットアップと混同されることがよくあります[1]。そのため、サーバーのセットアップ用に設計されたsystemd-networkdを使用します。インターフェイスのすべてのIPアドレスを推測するのは難しいため、次のIPアドレスを使用してテストを設定しました。

                             10.10.10.2                       +----------+   10.10.10.1
                                /           vpn-tunnel        |          |       \
                             (tun0) =============\\    //======================> VPN-SERVER
PHONE ~.~.~.~.~.~> (wlan0)RPI(eth0) ------------> ROUTER ---> | INTERNET |
     \    wifi       /          \    ethernet    /       wan  |          |
192.168.1.2   192.168.1.1   192.168.0.2    192.168.0.1        +----------+

私にとってのもう1つの問題は、Cisco3000 VPNコンセントレータがないため、vpncを使用できないことです。代わりにopenvpnを使用しましたが、ルーティングでも同じことを行う必要があります。ただし、openvpnインフラストラクチャの設定はここでは範囲外です。

ネットワーキングからsystemd-networkdに移行する方法 を使用したいが、このファイルでステップ1からステップ3を使用するだけでよい場合は、

rpi ~$ Sudo cat >/etc/systemd/network/04-eth.network <<EOF
[Match]
Name=e*
[Network]
Address=192.168.0.2/24
Gateway=192.168.0.1
EOF

rpi ~$ Sudo cat >/etc/systemd/network/08-wifi.network <<EOF
[Match]
Name=wl*
[Network]
Address=192.168.1.1/24
IPForward=yes
EOF

ip forwardingは必須です。

wpa_supplicantを設定しないでください。代わりにhostapd [2]をインストールしてください。

rpi ~$ Sudo -Es
rpi ~# systemctl disable wpa_supplicant.service
rpi ~# apt update
rpi ~# apt full-upgrade
rpi ~# apt install hostapd
rpi ~# systemctl stop hostapd.service

次のファイルを使用して、アクセスポイントのホストソフトウェア(hostapd)を構成します。

rpi ~# cat >/etc/hostapd/hostapd.conf <<EOF
interface=wlan0
driver=nl80211
ssid=MyTestAP
hw_mode=g
channel=6
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=VerySecretPw
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
EOF

rpi ~# chmod 600 /etc/hostapd/hostapd.conf

/ etc/default/hostapdのDAEMON_CONF = "/ etc/hostapd /hostapd.conf"を次のように設定します。

rpi ~# sed -i 's/^#DAEMON_CONF=.*$/DAEMON_CONF="\/etc\/hostapd\/hostapd.conf"/' /etc/default/hostapd
rpi ~# systemctl reboot

次に、インターネットルーターに静的ルートを設定して、raspi経由で携帯電話までのルートを見つけられるようにする必要があります。ほとんどのインターネットルーターでは静的ルートを設定できますが、その方法はモデルごとに異なります。それを見つけるのはあなた次第です。 Raspberry Piでは、次のようになります(Raspiルーターに設定しないでください!)

rpi ~$ Sudo ip route add 192.168.1.0/24 via 192.168.0.2 dev ethX

つまり、インターネットルーターの場合:「サブネット192.168.1.0/24(宛先ネットワーク)に属するすべてのパケットを、サブネット上の次のルーターであるraspi-router 192.168.0.2(ゲートウェイ)に送信します。どこに進むかがわかります。 。」

インターネットルーターにアクセスできない場合は、natを使用して偽造し、すべてのパケットがraspiから送信されていることを嘘で伝えることができます。これをRaspberryPiに設定します。

rpi ~$ Sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

ただし、これはクリーンなルーティングではなく、制限があり、混乱を招く可能性があるため、2番目の選択肢にすぎません。

ここで携帯電話をMyTestAPに接続する場合は、静的IPアドレス192.168.1.2、ゲートウェイ192.168.1.1で構成します。その後、インターネットに接続できるようになります。

設定は次のとおりです。

rpi ~$ ip addr   # stripped to relevant information
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope Host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.0.2/24 brd 192.168.0.255 scope global eth0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.1.1/24 brd 192.168.1.255 scope global wlan0

rpi ~$ ip route
default via 192.168.0.1 dev eth0 proto static
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.2
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.1

今私はVPN接続を確立します。と:

rpi ~$ Sudo openvpn myVpn.conf

その場合の設定は次のとおりです。

rpi ~$ ip addr   # stripped to relevant information
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope Host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.0.2/24 brd 192.168.0.255 scope global eth0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.1.1/24 brd 192.168.1.255 scope global wlan0
11: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none
    inet 10.10.10.2 peer 10.10.10.1/32 scope global tun0

rpi ~$ ip route
default via 192.168.0.1 dev eth0 proto static
10.0.0.0/8 via 10.10.10.1 dev tun0
10.10.10.1 dev tun0 proto kernel scope link src 10.10.10.2
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.2
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.1

ここでは、リモートVPNサーバーにも静的ルートを設定する必要がありますが、それを行う機会はないと思います。したがって、サーバーを偽造できるのはnatだけです。 raspiセットの場合:

rpi ~$ Sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

今では、wifiを介して携帯電話で常にインターネットにアクセスできましたが、接続が確立されている場合はVPNネットワークにのみアクセスできました。


参照:
[1] dhcpcd vs/etc/network/interfaces
[2] アクセスポイントとしてのRaspberry Piの設定

3
Ingo