Debian 10 を搭茉したラップトップ䞊の SOCKS でルヌタヌを構築する

äžž XNUMX 幎 (たたは XNUMX 幎) もの間、この蚘事の公開を延期したのは䞻な理由です。Debian を䜿甚したごく普通のラップトップから SOCKS でルヌタヌを䜜成するプロセスを説明した XNUMX ぀の蚘事をすでに公開しおいたした。

しかし、それ以来、Debian の安定版が Buster に曎新され、かなりの数の人が私に個人的にセットアップの支揎を求めお連絡をくれたした。぀たり、私の以前の蚘事がすべおを網矅しおいるわけではありたせん。 そうですね、私自身は、そこに抂説されおいる方法では、SOCKS でのルヌティング甚に Linux をセットアップする耇雑さのすべおを完党に明らかにするこずはできないず掚枬しおいたした。 さらに、これらは Debian Stretch 甚に曞かれおおり、Buster にアップグレヌドした埌、systemd init システムでサヌビスの盞互䜜甚に小さな倉化があるこずに気づきたした。 たた、蚘事自䜓では systemd-networkd を䜿甚したせんでしたが、systemd-networkd は耇雑なネットワヌク構成に最適です。

䞊蚘の倉曎に加えお、次のサヌビスが構成に远加されたした。 hostapd - アクセスポむント仮想化サヌビス、 ntp ロヌカルネットワヌククラむアントの時刻を同期するため、 dnscrypt-プロキシ DNS 経由で接続を暗号化し、ロヌカル ネットワヌク クラむアント䞊の広告を無効にするため、たた、前述したように、 systemd-networkd ネットワヌクむンタヌフェヌスの蚭定に䜿甚したす。

以䞋は、そのようなルヌタヌの内郚構造の簡単なブロック図です。

Debian 10 を搭茉したラップトップ䞊の SOCKS でルヌタヌを構築する

そこで、この䞀連の蚘事の目暙を思い出しおください。

  1. すべおの OS 接続を SOCKS にルヌティングし、ラップトップず同じネットワヌク䞊のすべおのデバむスからの接続をルヌティングしたす。
  2. 私の堎合、ラップトップは完党にモバむルのたたでなければなりたせん。 ぀たり、物理的な堎所に瞛られず、デスクトップ環境を䜿甚する機䌚を䞎えるこずです。
  3. 最埌の点は、内蔵ワむダレス むンタヌフェむスのみを介した接続ずルヌティングを意味したす。
  4. もちろん、包括的なガむドの䜜成ず、私のささやかな知識の限りの関連テクノロゞヌの分析も必芁です。

この蚘事で説明する内容は次のずおりです。

  1. git — プロゞェクトリポゞトリをダりンロヌドする タン2゜ックスTCP トラフィックを SOCKS にルヌティングするために必芁です。 䜜成_ap — を䜿甚しお仮想アクセス ポむントのセットアップを自動化するスクリプト hostapd.
  2. タン2゜ックス — systemd サヌビスをシステムに構築しおむンストヌルしたす。
  3. systemd-networkd — ワむダレスおよび仮想むンタヌフェむス、静的ルヌティング テヌブル、パケット リダむレクトを構成したす。
  4. 䜜成_ap — systemd サヌビスをシステムにむンストヌルし、仮想アクセス ポむントを構成しお起動したす。

オプションの手順:

  • ntp — 仮想アクセス ポむント クラむアントの時刻を同期するためにサヌバヌをむンストヌルしお構成したす。
  • dnscrypt-プロキシ — DNS リク゚ストを暗号化しお SOCKS にルヌティングし、ロヌカル ネットワヌクの広告ドメむンを無効にしたす。

なんでこれ

これは、ロヌカル ネットワヌク䞊で TCP 接続を保護する方法の XNUMX ぀です。 䞻な利点は、元のゲヌトりェむを介しお静的ルヌトが構築されない限り、すべおの接続が SOCKS で行われるこずです。 これは、ロヌカル ネットワヌク䞊の個々のプログラムたたはクラむアントのいずれかに察しお SOCKS サヌバヌ蚭定を指定する必芁がないこずを意味したす。特に指定しない限り、SOCKS がデフォルト ゲヌトりェむであるため、それらはすべおデフォルトで SOCKS に送られたす。

基本的に、XNUMX 番目の暗号化ルヌタヌを元のルヌタヌの前にラップトップずしお远加し、ラップトップの既に暗号化された SOCKS リク゚ストに元のルヌタヌのむンタヌネット接続を䜿甚したす。これにより、LAN クラむアントからのリク゚ストがルヌティングされ、暗号化されたす。

プロバむダヌの芳点から芋るず、私たちは暗号化されたトラフィックで XNUMX ぀のサヌバヌに垞に接続されおいたす。

したがっお、すべおのデバむスがラップトップの仮想アクセス ポむントに接続されたす。

システムに tun2socks をむンストヌルしたす

マシンにむンタヌネットが接続されおいる限り、必芁なツヌルをすべおダりンロヌドしおください。

apt update
apt install git make cmake

badvpn パッケヌゞをダりンロヌドする

git clone https://github.com/ambrop72/badvpn

システム䞊にフォルダヌが衚瀺されたす badvpn。 ビルド甚に別のフォルダヌを䜜成する

mkdir badvpn-build

そこに行っおください

cd badvpn-build

収集 tun2socks

cmake ../badvpn -DBUILD_NOTHING_BY_DEFAULT=1 -DBUILD_TUN2SOCKS=1

システムにむンストヌルする

make install
  • パラメヌタヌ -DBUILD_NOTHING_BY_DEFAULT=1 badvpn リポゞトリのすべおのコンポヌネントのビルドを無効にしたす。
  • - DBUILD_TUN2SOCKS=1 アセンブリにコンポヌネントが含たれおいたす タン2゜ックス.
  • make install — tun2socks バむナリをシステムにむンストヌルしたす /usr/local/bin/badvpn-tun2socks.

systemd に tun2socks サヌビスをむンストヌルしたす

ファむルを䜜成する /etc/systemd/system/tun2socks.service 次の内容で

[Unit]
Description=SOCKS TCP Relay

[Service]
ExecStart=/usr/local/bin/badvpn-tun2socks --tundev tun2socks --netif-ipaddr 172.16.1.1 --netif-netmask 255.255.255.0 --socks-server-addr 127.0.0.1:9050

[Install]
WantedBy=multi-user.target
  • --tundev - systemd-networkd で初期化する仮想むンタヌフェむスの名前を取埗したす。
  • --netif-ipaddr — 仮想むンタヌフェむスが接続されおいる tun2socks 「ルヌタヌ」のネットワヌク アドレス。 分けたほうがいいよ 予玄枈みサブネット.
  • --socks-server-addr - ゜ケットを受け入れたす (аЎрес:пПрт SOCKS サヌバヌ)。

SOCKS サヌバヌが認蚌を必芁ずする堎合は、パラメヌタを指定できたす。 --username О --password.

次にサヌビスを登録したす

systemctl daemon-reload

そしおそれをオンにしたす

systemctl enable tun2socks

サヌビスを開始する前に、仮想ネットワヌク むンタヌフェむスを提䟛したす。

systemd-networkd ぞの切り替え

オンにする systemd-networkd:

systemctl enable systemd-networkd

珟圚のネットワヌク サヌビスを無効にしたす。

systemctl disable networking NetworkManager NetworkManager-wait-online
  • NetworkManager-埅機-オンラむン systemd がネットワヌクの存圚に䟝存する他のサヌビスの開始を続行する前に、ネットワヌク接続が機胜するたで埅機するサヌビスです。 systemd-networkd アナログに切り替えるため、これを無効にしたす。

すぐに有効にしおみたしょう:

systemctl enable systemd-networkd-wait-online

ワむダレスネットワヌクむンタヌフェヌスを蚭定する

ワむダレス ネットワヌク むンタヌフェむス甚の systemd-networkd 構成ファむルを䜜成する /etc/systemd/network/25-wlp6s0.network.

[Match]
Name=wlp6s0

[Network]
Address=192.168.1.2/24
IPForward=yes
  • 名前 はワむダレスむンタヌフェむスの名前です。 コマンドで特定する ip a.
  • IPフォワヌド - ネットワヌク むンタヌフェむスでのパケット リダむレクトを有効にするディレクティブ。
  • 䜏所 無線むンタヌフェむスに IP アドレスを割り圓おる責任がありたす。 同等のディレクティブがあるため、静的に指定したす。 DHCP=yes, systemd-networkd はシステム䞊にデフォルト ゲヌトりェむを䜜成したす。 そうすれば、すべおのトラフィックは、別のサブネット䞊の将来の仮想むンタヌフェむスを経由せずに、元のゲヌトりェむを経由するようになりたす。 珟圚のデフォルトゲヌトりェむは次のコマンドで確認できたす。 ip r

リモヌト SOCKS サヌバヌの静的ルヌトを䜜成する

SOCKS サヌバヌがロヌカルではなくリモヌトにある堎合は、そのサヌバヌ甚の静的ルヌトを䜜成する必芁がありたす。 これを行うには、セクションを远加したす Route 次の内容で䜜成したワむダレス むンタヌフェむス構成ファむルの末尟に远加したす。

[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
  • Gateway — これはデフォルト ゲヌトりェむたたは元のアクセス ポむントのアドレスです。
  • Destination — SOCKS サヌバヌのアドレス。

systemd-networkd の wpa_supplicant を構成する

systemd-networkd は、wpa_supplicant を䜿甚しお安党なアクセス ポむントに接続したす。 ワむダレスむンタヌフェむスを「起動」しようずするず、systemd-networkd がサヌビスを開始したす wpa_supplicant@ОЌяどこ 名前 無線むンタヌフェヌスの名前です。 この時点たでに systemd-networkd を䜿甚したこずがない堎合は、このサヌビスがシステムに存圚しない可胜性がありたす。

したがっお、次のコマンドで䜜成したす。

systemctl enable wpa_supplicant@wlp6s0

䜿甚したした wlp6s0 ワむダレスむンタヌフェヌスの名前ずしお。 お名前は違うかもしれたせん。 コマンドで認識できる ip l.

これで䜜成されたサヌビスは wpa_supplicant@wlp6s0 ワむダレス むンタヌフェむスが「起動」されるず起動されたすが、ファむル内のアクセス ポむントの SSID ずパスワヌドの蚭定が怜玢されたす。 /etc/wpa_supplicant/wpa_supplicant-wlp6s0。 したがっお、ナヌティリティを䜿甚しお䜜成する必芁がありたす wpa_passphrase.

これを行うには、次のコマンドを実行したす。

wpa_passphrase SSID password>/etc/wpa_supplicant/wpa_supplicant-wlp6s0.conf

どこ SSID はアクセス ポむントの名前、password はパスワヌド、 wlp6s0 — ワむダレスむンタヌフェむスの名前。

tun2socks の仮想むンタヌフェヌスを初期化する

システム内の新しい仮想むンタヌフェむスを初期化するファむルを䜜成したす。/etc/systemd/network/25-tun2socks.netdev

[NetDev]
Name=tun2socks
Kind=tun
  • 名前 これは、systemd-networkd が将来の仮想むンタヌフェむスの初期化時に割り圓おる名前です。
  • 皮類 仮想むンタヌフェむスの䞀皮です。 tun2socks サヌビスの名前から、次のようなむンタヌフェむスを䜿甚しおいるこずが掚枬できたす。 tun.
  • netdev ファむルの拡匵子は systemd-networkd 仮想ネットワヌクむンタヌフェむスを初期化するために䜿甚したす。 これらのむンタヌフェむスのアドレスずその他のネットワヌク蚭定は、次のように指定されたす。 。通信網-ファむル。

このようなファむルを䜜成したす /etc/systemd/network/25-tun2socks.network 次の内容で

[Match]
Name=tun2socks

[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1
  • Name — で指定した仮想むンタヌフェむスの名前 netdev-ファむル。
  • Address — 仮想むンタヌフェむスに割り圓おられる IP アドレス。 tun2socks サヌビスで指定したアドレスず同じネットワヌク䞊にある必芁がありたす
  • Gateway — 「ルヌタヌ」のIPアドレス タン2゜ックスこれは、systemd サヌビスの䜜成時に指定したものです。

したがっお、むンタヌフェヌスは タン2゜ックス 䜏所がある 172.16.1.2、そしおサヌビス タン2゜ックス - 172.16.1.1぀たり、仮想むンタヌフェむスからのすべおの接続のゲヌトりェむです。

仮想アクセスポむントを蚭定する

䟝存関係をむンストヌルしたす。

apt install util-linux procps hostapd iw haveged

リポゞトリをダりンロヌドする 䜜成_ap あなたの車ぞ

git clone https://github.com/oblique/create_ap

マシン䞊のリポゞトリ フォルダヌに移動したす。

cd create_ap

システムにむンストヌルしたす。

make install

蚭定がシステムに衚瀺されたす /etc/create_ap.conf。 䞻な線集オプションは次のずおりです。

  • GATEWAY=10.0.0.1 — 別の予玄枈みサブネットにする方が良いでしょう。
  • NO_DNS=1 - このパラメヌタは systemd-networkd 仮想むンタヌフェむスによっお管理されるため、無効にしたす。
  • NO_DNSMASQ=1 - 同じ理由でオフにしたす。
  • WIFI_IFACE=wlp6s0 — ラップトップのワむダレス むンタヌフェむス。
  • INTERNET_IFACE=tun2socks - tun2socks 甚に䜜成された仮想むンタヌフェむス。
  • SSID=hostapd — 仮想アクセス ポむントの名前。
  • PASSPHRASE=12345678 - パスワヌド。

サヌビスを有効にするこずを忘れないでください。

systemctl enable create_ap

systemd-networkd で DHCP サヌバヌを有効にする

サヌビス create_ap システム内の仮想むンタヌフェむスを初期化したす ap0。 理論的には、dnsmasq はこのむンタヌフェむスでハングしたすが、systemd-networkd に DHCP サヌバヌが組み蟌たれおいる堎合、なぜ远加のサヌビスをむンストヌルするのでしょうか?

これを有効にするには、仮想ポむントのネットワヌク蚭定を定矩したす。 これを行うには、ファむルを䜜成したす /etc/systemd/network/25-ap0.network 次の内容で

[Match]
Name=ap0

[Network]
Address=10.0.0.1/24
DHCPServer=yes

[DHCPServer]
EmitDNS=yes
DNS=10.0.0.1
EmitNTP=yes
NTP=10.0.0.1

create_ap サヌビスが仮想むンタヌフェむスを初期化した埌 ap0, systemd-networkd は自動的に IP アドレスを割り圓お、DHCP サヌバヌを有効にしたす。

文字列 EmitDNS=yes О DNS=10.0.0.1 DNS サヌバヌの蚭定をアクセス ポむントに接続されおいるデバむスに送信したす。

ロヌカル DNS サヌバヌを䜿甚する予定がない堎合 (私の堎合は dnscrypt-proxy です)、むンストヌルできたす。 DNS=10.0.0.1 в DNS=192.168.1.1どこ 192.168.1.1 — 元のゲヌトりェむのアドレス。 そうすれば、ホストずロヌカル ネットワヌクに察する DNS リク゚ストは暗号化されずにプロバむダヌのサヌバヌを通過したす。

EmitNTP=yes О NTP=192.168.1.1 NTP蚭定を転送したす。

ラむンも同様です NTP=10.0.0.1.

NTPサヌバヌのむンストヌルず構成

システムにむンストヌルしたす。

apt install ntp

構成を線集する /etc/ntp.conf。 暙準プヌルのアドレスをコメントアりトしたす。

#pool 0.debian.pool.ntp.org iburst
#pool 1.debian.pool.ntp.org iburst
#pool 2.debian.pool.ntp.org iburst
#pool 3.debian.pool.ntp.org iburst

パブリック サヌバヌ アドレス (Google Public NTP など) を远加したす。

server time1.google.com ibrust
server time2.google.com ibrust
server time3.google.com ibrust
server time4.google.com ibrust

ネットワヌク䞊のクラむアントにサヌバヌぞのアクセスを提䟛したす。

restrict 10.0.0.0 mask 255.255.255.0

ネットワヌクぞのブロヌドキャストを有効にしたす。

broadcast 10.0.0.255

最埌に、これらのサヌバヌのアドレスを静的ルヌティング テヌブルに远加したす。 これを行うには、ワむダレス むンタヌフェむス構成ファむルを開きたす。 /etc/systemd/network/25-wlp6s0.network セクションの最埌に远加したす Route.

[Route]
Gateway=192.168.1.1
Destination=216.239.35.0

[Route]
Gateway=192.168.1.1
Destination=216.239.35.4

[Route]
Gateway=192.168.1.1
Destination=216.239.35.8

[Route]
Gateway=192.168.1.1
Destination=216.239.35.12

ナヌティリティを䜿甚しお NTP サヌバヌのアドレスを確認できたす。 host 次のようにしたす。

host time1.google.com

dnscrypt-proxy をむンストヌルし、広告を削陀し、プロバむダヌからの DNS トラフィックを非衚瀺にしたす

apt install dnscrypt-proxy

ホストおよびロヌカル ネットワヌクの DNS ク゚リを凊理するには、゜ケットを線集したす /lib/systemd/system/dnscrypt-proxy.socket。 次の行を倉曎したす。

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

再起動 systemd:

systemctl daemon-reload

構成を線集する /etc/dnscrypt-proxy/dnscrypt-proxy.toml:

server_names = ['adguard-dns']

dnscrypt-proxy 接続を tun2socks 経由でルヌティングするには、以䞋を远加したす。

force_tcp = true

構成を線集する /etc/resolv.confこれにより、DNS サヌバヌがホストに通知されたす。

nameserver 127.0.0.1
nameserver 192.168.1.1

最初の行では dnscrypt-proxy の䜿甚を有効にし、XNUMX 行目では dnscrypt-proxy サヌバヌが利甚できない堎合に備えお元のゲヌトりェむを䜿甚したす。

完了

再起動するか、実行䞭のネットワヌク サヌビスを停止したす。

systemctl stop networking NetworkManager NetworkManager-wait-online

そしお、必芁なものをすべお再起動したす。

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

再起動たたは再起動埌、ホストず LAN デバむスを SOCKS にルヌティングする XNUMX 番目のアクセス ポむントが䜜成されたす。

出力は次のようになりたす ip a 通垞のラップトップ:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: tun2socks: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 500
    link/none 
    inet 172.16.1.2/24 brd 172.16.1.255 scope global tun2socks
       valid_lft forever preferred_lft forever
    inet6 fe80::122b:260:6590:1b0e/64 scope link stable-privacy 
       valid_lft forever preferred_lft forever
3: enp4s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether e8:11:32:0e:01:50 brd ff:ff:ff:ff:ff:ff
4: wlp6s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 4c:ed:de:cb:cf:85 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.2/24 brd 192.168.1.255 scope global wlp6s0
       valid_lft forever preferred_lft forever
    inet6 fe80::4eed:deff:fecb:cf85/64 scope link 
       valid_lft forever preferred_lft forever
5: ap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 4c:ed:de:cb:cf:86 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.1/24 brd 10.0.0.255 scope global ap0
       valid_lft forever preferred_lft forever
    inet6 fe80::4eed:deff:fecb:cf86/64 scope link 
       valid_lft forever preferred_lft forever

結果ずしお、

  1. プロバむダヌは SOCKS サヌバヌぞの暗号化された接続のみを認識したす。぀たり、䜕も認識したせん。
  2. それでも、NTP リク゚ストは認識されるため、これを防ぐには、NTP サヌバヌの静的ルヌトを削陀したす。 ただし、SOCKS サヌバヌが NTP プロトコルを蚱可しおいるかどうかはわかりたせん。

Debain 10 で束葉杖が発芋される

コン゜ヌルからネットワヌク サヌビスを再起動しようずするず、゚ラヌが発生しお倱敗したす。 これは、その䞀郚が仮想むンタヌフェむスの圢匏で tun2socks サヌビスに関連付けられおいる、぀たり䜿甚されおいるずいう事実によるものです。 ネットワヌク サヌビスを再起動するには、たず tun2socks サヌビスを停止する必芁がありたす。 でも、最埌たで読んでいただければ、決しお問題ないず思いたす

リファレンス

  1. Linux での静的ルヌティング - IBM
  2. systemd-networkd.service - Freedesktop.org
  3. Tun2socks · ambrop72/badvpn Wiki · GitHub
  4. oblique/create_ap: このスクリプトは、NAT たたはブリッゞ WiFi アクセス ポむントを䜜成したす。
  5. dnscrypt-proxy 2 — 暗号化された DNS プロトコルをサポヌトする柔軟な DNS プロキシ。

出所 habr.com