szgislle

szgislle

生命不息,折腾不止!

【NanoPi R2Sバイパスゲートウェイシリーズ】(一)基本設定、Wireguard

前言#

自己の家には自作の All in One サーバーがあり、システムは PVE で、上で仮想マシン OpenWRT を動かして家庭のバイパスゲートウェイの機能を担っています。最初は国内で誰かがコンパイルしたバージョンを使用していましたが、その後公式の 22.05 バージョンを自分でコンパイルし、自分が必要とする機能を追加して、2 年間安定して運用してきました。しかし、All in One の最大の問題はホストマシンの再起動です。最近、グラフィックカードのパススルーを試みるために PVE を頻繁に再起動する必要があり、もし家のリーダーが王者をプレイ中に切断されたら大変なことになります。そこで 618(そう、618 で今やっと切り替えました)を利用して R2S を購入し、家のリーダーが文句を言う機会を完全に排除しました。

需求#

基本的には現在の仮想マシン上の OpenWRT 機能の移植です:

  1. Wireguard

Wireguard を使用して、会社から家庭のネットワークにアクセスできるようにする。

  1. 自定义域名

カスタムドメインと Nginx を使用して、自分でデプロイしたサービスにドメインアクセスを実現し、IP やポートを覚える必要がなく、ダッシュボードサービスを維持する必要がない。

  1. DDNS 服务

パブリック IP を自動更新し、毎回ダイヤル後に Wireguard が切断されるのを防ぐ。

  1. KMS 服务

Windows のアクティベーション。

  1. 懂的都懂需求

そのまま、詳細は省略します。

R2S 系统安装#

次に、上記の要求を一歩ずつ実現していきます。まずはシステムの選択です。公式の紹介に従い、公式が自らメンテナンスしている OpenWRT のディストリビューションを選択します。Docker に関しては現在のところ必要ありませんが、将来的に必要になる可能性があるため、直接一発で、公式の OpenWrt 22.03 を基にした Docker 付きのFriendlyWrt ファームウェアを選択します。

image.png

次に、ファームウェアを TF カードに書き込み、電源を入れます。

系统配置#

ネットワークケーブルを接続し、コンピュータの IP を192.168.2.100に変更します。システムのデフォルト IP は192.168.2.1で、設定するクライアント IP も192.168.2.0/16ネットワークセグメント内でなければ相互訪問できません。現在、ssh を使用して openwrt のバックエンドにアクセスします:

ssh root@192.168.2.1

デフォルトのパスワードはpasswordです。
まずは安全なパスワードに変更します。

passwd root

修改 ip 地址#

まず、IP を変更してインターネットアクセスを可能にします。

vi /etc/config/network

config interface 'lan'の部分を見つけ、以下のように変更します:

config interface 'lan'
        option device 'br-lan'
        option proto 'static'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option ipaddr '192.168.5.99'
        option gateway '192.168.5.1'

上記のマスクとゲートウェイは家庭のネットワーク環境に応じて変更する必要があります。私の仮想マシン openwrt は現在良好なネットワークアクセス能力を持っているため、ゲートウェイは仮想マシン openwrt の IP に設定しました。また、IP が衝突しないように注意が必要です。

修改 DNS#

vi /etc/config/dhcp

dnsmasq の設定オプションにlist server '192.168.5.1'を追加します。
dncp 'lan' の設定オプションのoption ignoreを 1 に変更し、Web インターフェースでこのインターフェースを無視するようにします。

config dnsmasq
        option domainneeded '1'
        option boguspriv '1'
        option filterwin2k '0'
        option localise_queries '1'
        option rebind_protection '1'
        option rebind_localhost '1'
        option local '/lan/'
        option domain 'lan'
        option expandhosts '1'
        option nonegcache '0'
        option authoritative '1'
        option readethers '1'
        option leasefile '/tmp/dhcp.leases'
        option resolvfile '/tmp/resolv.conf.d/resolv.conf.auto'
        option nonwildcard '1'
        option localservice '1'
        option ednspacket_max '1232'
        option confdir '/tmp/dnsmasq.d'
        list server '192.168.5.1'

config dhcp 'lan'
        option interface 'lan'
        option start '100'
        option limit '150'
        option leasetime '12h'
        option dhcpv4 'server'
        option dhcpv6 'server'
        option ra 'server'
        list ra_flags 'managed-config'
        list ra_flags 'other-config'
        option ignore '1'

config dhcp 'wan'
        option interface 'wan'
        option ignore '1'

config odhcpd 'odhcpd'
        option maindhcp '0'
        option leasefile '/tmp/hosts/odhcpd'
        option leasetrigger '/usr/sbin/odhcpd-update'
        option loglevel '4'

コマンドを実行してインターネットアクセス能力を確認します。

curl https://baidu.com

証明書エラーが発生します。

root@FriendlyWrt:~# curl https://baidu.com
curl: (60) Cert verify failed: BADCERT_FUTURE
More details here: https://curl.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

ネットワークはインターネットに接続されており、他のマシンも正常にインターネットに接続できています。調べたところ、マシンの時間に問題があることがわかりました:

root@FriendlyWrt:~# date
Fri Jan 22 17:07:48 CST 2016

ntp サービスを確認します。

root@FriendlyWrt:~# ps | grep ntp
 3942 root      2592 S    {ntpd} /sbin/ujail -t 5 -n ntpd -U ntp -G ntp -C /etc/capabilities/ntpd.json -c -u -r /bin/ubus -r /usr/bin/env -r /usr/bin/jshn -r /usr/sbin/ntpd-hotplug -r /usr/share/libubox/jshn.s
 3954 ntp       1320 S    /usr/sbin/ntpd -n -N -S /usr/sbin/ntpd-hotplug -p 0.openwrt.pool.ntp.org -p 1.openwrt.pool.ntp.org -p 2.openwrt.pool.ntp.org -p 3.openwrt.pool.ntp.org
 5678 root      1572 S    grep ntp

ntp をアリババの ntp に変更します。

vi /etc/config/system
config system
        option log_size '64'
        option urandom_seed '0'
        option hostname 'FriendlyWrt'
        option ttylogin '1'
        option timezone 'CST-8'
        option zonename 'Asia/Shanghai'

config timeserver 'ntp'
        option enabled '1'
        option enable_server '0'
        list server 'ntp.aliyun.com'
        list server 'ntp1.aliyun.com'
        list server 'ntp2.aliyun.com'
        list server 'ntp3.aliyun.com'

config led 'led_wan'
        option name 'WAN'
        option sysfs 'wan_led'
        option trigger 'netdev'
        option mode 'link tx rx'
        option dev 'eth0'

config led 'led_lan'
        option name 'LAN'
        option sysfs 'lan_led'
        option trigger 'netdev'
        option mode 'link tx rx'
        option dev 'eth1'

サービスを再起動します。

/etc/init.d/sysntpd restart

時間を確認します。

root@FriendlyWrt:~# date
Mon Aug  7 14:56:10 CST 2023

証明書の問題が解決されたか確認します。

root@FriendlyWrt:~# curl https://baidu.com
<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>bfe/1.0.8.18</center>
</body>
</html>

正常な 302 リダイレクトです。

修改源(可选)#

FriendlyWrt ファームウェアは Tencent のミラーを使用していますが、仮想マシン openwrt は Tsinghua のミラーを使用しているため、一貫性を保つために以下のように変更します:

sed -i -e 's/mirrors.cloud.tencent.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/opkg/distfeeds.conf

インデックスを更新します。

opkg update

Wireguard#

安装#

システムが設定された後、Wireguard のカーネルモジュールとツールパッケージを追加します。

opkg install kmod-wireguard wireguard-tools

カーネルが wireguard モジュールをロードしているか確認します。

lsmod | grep wireguard

以下のような出力が表示されれば、wireguard モジュールが正常にロードされています。

root@FriendlyWrt:~# lsmod | grep wireguard
wireguard              77824  0
libchacha20poly1305    16384  1 wireguard
libcurve25519_generic    40960  1 wireguard
udp_tunnel             24576  3 l2tp_core,wireguard,vxlan
ip6_udp_tunnel         16384  3 l2tp_core,wireguard,vxlan

公開鍵と秘密鍵のペアを生成します。

wg genkey | tee privatekey | wg pubkey > publickey

上記のコマンドで生成された公開鍵と秘密鍵はそれぞれprivatekeypublickeyに保存されます。
wireguard インターフェースを設定します。

vi /etc/config/network

末尾に以下の内容を追加します。中括弧内の内容は置き換えてください。

config interface 'wg0'
        option proto 'wireguard'
        option private_key '{private_key}'
        option listen_port '25378'
        list addresses '192.168.7.1'

ネットワークサービスを再起動します。

/etc/init.d/network restart

wireguard の状態を確認します。

root@FriendlyWrt:~# wg
interface: wg0
  public key: fTaGpi1YIlS6RTsWSjsHoWMHY1drWe/CTTOK/EUFTUE=
  private key: (hidden)
  listening port: 25378

上記の手順は Web インターフェースでも行うことができ、Web インターフェースを使用するには luci のサポートをインストールする必要があります:

opkg install luci-i18n-wireguard-zh-cn

Web インターフェース

image.png

公网访问#

現在、私の家庭ネットワークのトポロジーは以下の通りです:

image.png

上海に位置し、電信の光モデムでダイヤルアップし、パブリック IP があります。仮想マシン openwrt は 2 次ルーターの下に位置しています。これは、openwrt のポートを外に転送するために、2 次ルーターAC-68Uで一度転送し、光モデムで再度転送する必要があり、少し面倒です。そこで、安全を考慮して、電信アプリで 2 次ルーターを DMZ にし、2 次ルーターのファイアウォールを有効にし、2 次ルーターのポート転送機能を使用して wireguard のポートを転送すれば良いのです。これにより、パブリックネットワークが 2 次ルーターのすべてのポートを管理し、今後さまざまなポート転送の設定が容易になります。

注意:openwrt の Web ポート 80 と ssh ポート 22 をパブリックに転送しないでください。そうしないと、ハッカーが開いているボックスを見つけるのは時間の問題です。

windows 客户端配置#

Windows では公式のwireguard クライアントを使用し、新しい空のトンネルを作成します:

image.png

自動的に公開鍵と秘密鍵のペアが生成され、次に設定を入力します:

[Interface]
PrivateKey = {privatekey}
Address = 192.168.7.2/32
DNS = 192.168.7.1
MTU = 1300

[Peer]
PublicKey = {openwrt_publickey}
AllowedIPs = 192.168.7.0/24,192.168.5.0/24
Endpoint = {公网ip}:{转发端口}
PersistentKeepalive = 25
  • Interface 設定
    • PrivateKey: 自動生成された秘密鍵で、変更する必要はありません。
    • Address: 現在のノードの IP アドレスで、後で設定する対向アドレスと同じである必要があります。
    • DNS: openwrt が提供する DNS サービスを使用し、カスタムドメインを使用する際に役立ちます。会社でも社内のドメインにアクセスできます。
    • MTU: デフォルトは 1500 で、パケットの性能に影響します。これは自分で試す必要があります。小さくするとネットワーク性能が少し向上する可能性がありますが、あまり気にしない場合はデフォルトの 1500 で大丈夫です。
  • Peer 設定
    • PublicKey: openwrt の公開鍵を入力します。
    • AllowedIPs: アクセスを許可するネットワークセグメントで、ここには家庭内のネットワークセグメントを入力します。wireguard をすべてのネットワークセグメントのトンネルとして使用する場合は 0.0.0.0/0 を入力しますが、openwrt のファイアウォール設定が正しくないとインターネットにアクセスできません。
    • Endpoint: パブリックに転送された wireguard のアドレスとポート。
    • PersistentKeepalive: 保持時間を 25 秒に設定します。

配置对端#

Windows の設定が完了したら、openwrt でも相応の設定を行う必要があります:

vi /etc/config/network

以下の設定を追加します:

config wireguard_wg0
        option route_allowed_ips '1'
        option persistent_keepalive '25'
        option public_key 'VM3DZLzhtpkE0w1VgUmeRSuoX/6mgVMlJWtnynomUXg='
        option description 'Worklaptop'
        list allowed_ips '192.168.7.2'

ネットワークサービスを再起動します。

/etc/init.d/network restart

Windows クライアントで接続をクリックします:

image.png

トラフィックの送受信が正常であれば接続成功です。ゲートウェイに ping を送ってテストします:

image.png

対向接続は成功しましたが、内網192.168.5.0/24ネットワークにアクセスすることは明らかにできません。これはファイアウォールが wireguard からのネットワークアクセスを lan インターフェースに転送しているためです。次に、ファイアウォールの設定を開始します。

防火墙配置#

openwrt の Web インターフェースを通じて、「ネットワーク」 -> 「ファイアウォール」 -> 「NAT ルール」で、192.168.7.0/24ネットワークセグメントからのトラフィックを lan インターフェースに転送する NAT を設定します。これにより、内網セグメントへのアクセスが実現されます。もちろん、wireguard がすべてのネットワークセグメントにアクセスできるようにする場合は、ターゲットアドレスを任意に設定すれば良いです。

image.png

小结#

本章では、openwrt の最初の機能、外部から内部ネットワークへのアクセス、つまり VPN 機能を実現しました。これにより、さまざまなポート転送による内部ネットワークのリスクを心配することなく、家庭内ネットワークへの便利で安全なアクセスが可能になります。次に、2 つ目の要求であるカスタム内部ドメイン名の実現を続けます。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。