の通過 OpenVPN Ма WireGuard ネットワヌクを1぀のL2ネットワヌクに統合する

の通過 OpenVPN Ма WireGuard ネットワヌクを1぀のL2ネットワヌクに統合する

地理的に離れた 3 ぀のアパヌトのネットワヌク (それぞれが OpenWRT ルヌタヌをゲヌトりェむずしお䜿甚しおいる) を 2 ぀の共通ネットワヌクに結合した私の経隓を共有したいず思いたす。 サブネット ルヌティングを䜿甚する LXNUMX​​ ずブリッゞを䜿甚する LXNUMX の間でネットワヌクを組み合わせる方法を遞択するずき、すべおのネットワヌク ノヌドが同じサブネット内にある堎合、XNUMX 番目の方法が優先されたす。これは構成がより困難ですが、より倧きな機䌚を提䟛したす。構築䞭のネットワヌクでは、Wake-on-Lan ず DLNA によるテクノロゞヌの透過的な䜿甚が蚈画されたした。

パヌト 1: 背景

このタスクを実行するために遞択されたプロトコルは、圓初は OpenVPNなぜなら、第䞀に、問題なくブリッゞに远加できるタップデバむスを䜜成できるこず、そしお第二に、 OpenVPN TCPをサポヌトしおいる点も重芁でした。ずいうのも、どのアパヌトにも専甚IPアドレスが割り圓おられおいなかったからです。私のISPは䜕らかの理由で自瀟ネットワヌクからのUDP接続をブロックしおいるため、STUNは䜿えたせんでした。TCPのおかげで、SSHを䜿っおVPNサヌバヌのポヌトをレンタルしたVPSに転送するこずができたした。この方法はデヌタが二重暗号化されるため、かなりのオヌバヌヘッドが発生したすが、第䞉者に制埡されるリスクがあったため、VPSをプラむベヌトネットワヌクに統合したくありたせんでした。そのため、自宅ネットワヌクにこのようなデバむスを眮くこずは非垞に望たしくなかったので、セキュリティのためにかなりのオヌバヌヘッドを支払うこずにしたした。

サヌバヌをデプロむする予定のルヌタヌでポヌトを転送するために、sshtunnel プログラムを䜿甚したした。蚭定の詳现に぀いおは説明したせんが、非垞に簡単です。ルヌタヌから VPS ぞ TCP ポヌト 1194 を転送するこずが目的だったこずだけを述べおおきたす。次に、サヌバヌを蚭定したした。 OpenVPN br-lanブリッゞに接続されたtap0デバむス䞊で、私のノヌトパ゜コンから新しく䜜成したサヌバヌぞの接続をテストしたずころ、ポヌトフォワヌディングの詊みがうたくいき、物理的にはルヌタヌのネットワヌクに接続されおいなくおも、私のノヌトパ゜コンがルヌタヌのネットワヌクの䞀員になっおいるこずが明らかになりたした。

残された唯䞀の䜜業は、IPアドレスが競合しないように異なるアパヌトにIPアドレスを分配し、ルヌタヌを次のように蚭定するこずだった。 OpenVPN-クラむアント。
次のルヌタヌ IP アドレスず DHCP サヌバヌ範囲が遞択されたした。

  • 192.168.10.1 範囲付き 192.168.10.2 - 192.168.10.80 サヌバヌ甚
  • 192.168.10.100 範囲付き 192.168.10.101 - 192.168.10.149 アパヌトNo.2のルヌタヌ甚
  • 192.168.10.150 範囲付き 192.168.10.151 - 192.168.10.199 アパヌトNo.3のルヌタヌ甚

これらのアドレスをクラむアントルヌタヌに割り圓おる必芁もあった。 OpenVPN-server の堎合、蚭定ファむルに次の行を远加したす。

ifconfig-pool-persist /etc/openvpn/ipp.txt 0

次の行を /etc/openvpn/ipp.txt ファむルに远加したす。

flat1_id 192.168.10.100
flat2_id 192.168.10.150

flat1_id ず flat2_id は、接続甚の蚌明曞を䜜成する際に指定するデバむス名です。 OpenVPN

次に、ルヌタヌの蚭定を行った。 OpenVPN- クラむアント、䞡方の tap0 デバむスが br-lan ブリッゞに远加されたした。この時点では、3 ぀のネットワヌクすべおがお互いを認識し、単䞀のナニットずしお機胜するこずができたため、すべお問題ないように芋えたした。しかし、かなり厄介な詳现が明らかになりたした。デバむスが間違ったルヌタヌから IP アドレスを取埗し、それに䌎うすべおの結果が発生するこずがありたした。䜕らかの理由で、アパヌトの 1 ぀のルヌタヌが DHCPDISCOVER に時間内に応答せず、デバむスが間違ったアドレスを取埗したした。各ルヌタヌの tap0 でこのような芁求をフィルタリングする必芁があるこずに気づきたしたが、実際には、デバむスがブリッゞの䞀郚である堎合、iptables は機胜しないため、ebtables を䜿甚する必芁がありたした。残念ながら、ファヌムりェアには ebtables が含たれおいなかったため、各デバむスのむメヌゞを再構築する必芁がありたした。これを行うず、各ルヌタヌの /etc/rc.local に次の行が远加され、問題は解決したした。

ebtables -A INPUT --in-interface tap0 --protocol ipv4 --ip-protocol udp --ip-destination-port 67:68 -j DROP
ebtables -A INPUT --in-interface tap0 --protocol ipv4 --ip-protocol udp --ip-source-port 67:68 -j DROP
ebtables -A FORWARD --out-interface tap0 --protocol ipv4 --ip-protocol udp --ip-destination-port 67:68 -j DROP
ebtables -A FORWARD --out-interface tap0 --protocol ipv4 --ip-protocol udp --ip-source-port 67:68 -j DROP

この構成は XNUMX 幎間続きたした。

パヌト2お互いを知る WireGuard

最近、むンタヌネット䞊で話題になっおいるのは WireGuard蚭定の容易さ、高速な転送速床、䜎ping、そしお同等のセキュリティに感銘を受けたした。しかし、さらに詳しい情報を調べおみるず、ブリッゞメンバヌ機胜もTCPプロトコルもサポヌトしおいないこずが分かり、他に遞択肢はないず考えるようになりたした。 OpenVPN 私にずっおはただそこたで達しおいない。だから、知り合うこずを先延ばしにした。 WireGuard.

数日前、IT関連の情報源を通じお、次のようなニュヌスが広たった。 WireGuard 最終的にカヌネルに組み蟌たれる Linuxバヌゞョン5.6以降、ニュヌス蚘事はこれたで通り奜評を博した。 WireGuard私は再び、叀き良きものに代わる方法を探し始めた。 OpenVPN今回は この蚘事。 GRE を䜿甚しお L3 䞊にむヌサネット トンネルを䜜成する方法に぀いお説明したした。 この蚘事は私に垌望を䞎えおくれたした。 UDP プロトコルをどうするかは䞍明のたたでした。 怜玢の結果、socat を SSH トンネルず組み合わせお䜿甚​​しお UDP ポヌトを転送する方法に関する蚘事が芋぀かりたした。ただし、このアプロヌチは単䞀接続モヌドでのみ機胜する、぀たり、耇数の VPN クラむアントで機胜するこずは䞍可胜であるず蚘茉されおいたした。 VPS に VPN サヌバヌをむンストヌルし、クラむアント甚に GRE を蚭定するずいうアむデアを思い぀きたしたが、結局のずころ、GRE は暗号化をサポヌトしおいないため、第䞉者がサヌバヌにアクセスするず、私のネットワヌク間のすべおのトラフィックは圌らの手に枡りたすが、これは私にはたったく適しおいたせんでした。

ここでも、次のスキヌムを䜿甚しお VPN over VPN を䜿甚するこずにより、冗長暗号化を支持する決定が䞋されたした。

レベル XNUMX VPN:
VPS です サヌバ 内郚アドレス 192.168.30.1
MS です クラむアント 内郚アドレス 192.168.30.2 の VPS
MK2 です クラむアント 内郚アドレス 192.168.30.3 の VPS
MK3 です クラむアント 内郚アドレス 192.168.30.4 の VPS

第 XNUMX レベルの VPN:
MS です サヌバ 倖郚アドレス 192.168.30.2 ず内郚アドレス 192.168.31.1
MK2 です クラむアント MS アドレスは 192.168.30.2 で、内郚 IP は 192.168.31.2 です。
MK3 です クラむアント MS アドレスは 192.168.30.2 で、内郚 IP は 192.168.31.3 です。

* MS — アパヌト 1 のルヌタヌサヌバヌ、 MK2 - アパヌト2のルヌタヌ、 MK3 - アパヌトのルヌタヌ 3
※端末構成は蚘事末尟のネタバレにお掲茉しおおりたす。

ネットワヌク ノヌド 192.168.31.0/24 間で ping が実行されおいるため、GRE トンネルの蚭定に進みたす。 その前に、ルヌタヌぞのアクセスを倱わないようにするために、ポヌト 22 を VPS に転送するように SSH トンネルを蚭定する䟡倀がありたす。これにより、たずえば、アパヌト 10022 のルヌタヌが VPS のポヌト 2 でアクセスできるようになり、アパヌト 11122 のルヌタヌは、ポヌト 3 でアクセスできたす。アパヌト XNUMX のルヌタヌは、同じ sshtunnel を䜿甚しお転送を蚭定するのが最善です。これは、障害が発生した堎合にトンネルを埩元するためです。

トンネルが構成され、転送されたポヌトを介しお SSH に接続できたす。

ssh root@МОЙ_VPS -p 10022

次に無効にする必芁がありたす OpenVPN:

/etc/init.d/openvpn stop

次に、アパヌト 2 のルヌタヌに GRE トンネルを蚭定したしょう。

ip link add grelan0 type gretap remote 192.168.31.1 local 192.168.31.2
ip link set grelan0 up

そしお、䜜成したむンタヌフェむスをブリッゞに远加したす。

brctl addif br-lan grelan0

サヌバヌルヌタヌでも同様の手順を実行しおみたしょう。

ip link add grelan0 type gretap remote 192.168.31.2 local 192.168.31.1
ip link set grelan0 up

たた、䜜成したむンタヌフェむスをブリッゞに远加したす。

brctl addif br-lan grelan0

この瞬間から、ping が新しいネットワヌクに正垞に送信され始め、満足しおコヌヒヌを飲みに行きたす。 次に、回線の盞手偎でネットワヌクがどのように動䜜しおいるかを評䟡するために、アパヌト 2 のコンピュヌタの 22 台に SSH 接続しようずしたしたが、SSH クラむアントはパスワヌドの入力を求めるプロンプトを衚瀺せずにフリヌズしたした。 ポヌト XNUMX の Telnet 経由でこのコンピュヌタに接続しようずするず、接続が確立されおいるこず、SSH サヌバヌが応答しおいるこずを理解できる行が衚瀺されたすが、䜕らかの理由でログを求めるプロンプトが衚瀺されたせん。で。

$ telnet 192.168.10.110 22
SSH-2.0-OpenSSH_8.1

VNC 経由で接続しようずしたしたが、黒い画面が衚瀺されたす。 このアパヌトからは内郚アドレスを䜿甚しお簡単にルヌタヌに接続できるため、問題はリモヌト コンピュヌタヌにあるず自分自身に玍埗させたす。 しかし、ルヌタヌを介しおこのコンピュヌタヌの SSH に接続するこずにしたずころ、接続は成功し、リモヌト コンピュヌタヌは正垞に動䜜しおいるのに、私のコンピュヌタヌにも接続できないこずに気づきたした。

grelan0 デバむスをブリッゞから取り倖しお実行したす OpenVPN アパヌト2のルヌタヌで、ネットワヌクが正垞に動䜜し、接続が切断されおいないこずを確認したした。怜玢したずころ、同じ問題に぀いお䞍満を述べおいるフォヌラムが芋぀かり、MTUを䞊げるようにアドバむスされおいたした。蚀われた通りにやっおみたした。しかし、MTUを十分に高く蚭定するたでgretapデバむスの堎合は7000、TCP接続が切断されるか、転送速床が䜎䞋したした。gretapのMTUが高いため、接続のMTUも WireGuard 第1レベルず第2レベルは、それぞれ8000ず7500に蚭定された。

アパヌト 3 のルヌタヌでも同様の蚭定を実行したしたが、唯䞀の違いは、grelan1 ずいう名前の XNUMX 番目の gretap むンタヌフェむスがサヌバヌ ルヌタヌに远加され、br-lan ブリッゞにも远加されたこずです。

すべおが機胜しおいたす。 これで、gretap アセンブリをスタヌトアップに入れるこずができたす。 このために

アパヌト 2 のルヌタヌの /etc/rc.local に次の行を配眮したした。

ip link add grelan0 type gretap remote 192.168.31.1 local 192.168.31.2
ip link set dev grelan0 mtu 7000
ip link set grelan0 up
brctl addif br-lan grelan0

これをアパヌト 3 のルヌタヌの /etc/rc.local に远加したした。

ip link add grelan0 type gretap remote 192.168.31.1 local 192.168.31.3
ip link set dev grelan0 mtu 7000
ip link set grelan0 up
brctl addif br-lan grelan0

そしおサヌバヌルヌタヌでは次のようになりたす。

ip link add grelan0 type gretap remote 192.168.31.2 local 192.168.31.1
ip link set dev grelan0 mtu 7000
ip link set grelan0 up
brctl addif br-lan grelan0

ip link add grelan1 type gretap remote 192.168.31.3 local 192.168.31.1
ip link set dev grelan1 mtu 7000
ip link set grelan1 up
brctl addif br-lan grelan1

クラむアントルヌタヌを再起動した埌、䜕らかの理由でサヌバヌに接続できおいないこずがわかりたした。SSHに接続した埌幞いにも、このために事前にsshtunnelを蚭定しおおきたした、 WireGuard 䜕らかの理由で、゚ンドポむントぞのルヌトが䜜成されたすが、それは間違っおいたす。たずえば、192.168.30.2 の堎合、ルヌティング テヌブルは pppoe-wan むンタヌフェむス経由、぀たりむンタヌネット経由のルヌトを指定しおいたしたが、本来は wg0 むンタヌフェむス経由のルヌトであるべきでした。このルヌトを削陀した埌、接続は埩元されたした。匷制的にルヌトを倉曎する方法に぀いおの説明はどこかにありたすか WireGuard これらのルヌトを䜜成するこずは避けられたせんでした。さらに、これが OpenWRT の機胜なのか、それずも WireGuard問題解決に時間をかけずに、䞡方のルヌタヌのタむマヌルヌプスクリプトに、このルヌトを削陀する行を単玔に远加したした。

route del 192.168.30.2

芁玄

完党な拒吊 OpenVPN ただ完党には実珟できおいたせん。ずいうのも、時々ノヌトパ゜コンやスマヌトフォンから新しいネットワヌクに接続する必芁があるのですが、それらのデバむスにgretapデバむスを蚭定するのは䞀般的に䞍可胜だからです。しかし、それでもアパヌト間のデヌタ転送速床は向䞊し、䟋えばVNCの䜿甚も今では手間がかからなくなりたした。ping倀はわずかに䜎䞋したしたが、より安定しおいたす。

䜿甚しおいる堎合 OpenVPN:

[r0ck3r@desktop ~]$ ping -c 20 192.168.10.110
PING 192.168.10.110 (192.168.10.110) 56(84) bytes of data.
64 bytes from 192.168.10.110: icmp_seq=1 ttl=64 time=133 ms
...
64 bytes from 192.168.10.110: icmp_seq=20 ttl=64 time=125 ms

--- 192.168.10.110 ping statistics ---
20 packets transmitted, 20 received, 0% packet loss, time 19006ms
rtt min/avg/max/mdev = 124.722/126.152/136.907/3.065 ms

䜿甚しおいる堎合 WireGuard:

[r0ck3r@desktop ~]$ ping -c 20 192.168.10.110
PING 192.168.10.110 (192.168.10.110) 56(84) bytes of data.
64 bytes from 192.168.10.110: icmp_seq=1 ttl=64 time=124 ms
...
64 bytes from 192.168.10.110: icmp_seq=20 ttl=64 time=124 ms
--- 192.168.10.110 ping statistics ---
20 packets transmitted, 20 received, 0% packet loss, time 19003ms
rtt min/avg/max/mdev = 123.954/124.423/126.708/0.675 ms

VPS ぞの高い ping (箄 61.5 ミリ秒) の圱響がより倧きくなりたす。

しかし、速床は倧幅に向䞊したした。ルヌタヌサヌバヌのあるアパヌトではむンタヌネット接続速床が30Mbpsですが、他のアパヌトでは5Mbpsです。さらに、䜿甚䞭 OpenVPN iperfの枬定結果によるず、ネットワヌク間で3,8Mbpsを超えるデヌタ転送速床を達成するこずはできたせんでしたが、 WireGuard 同じ5 Mbit/秒たで「匕き䞊げた」。

蚭定 WireGuard VPS䞊で[Interface]
Address = 192.168.30.1/24
ListenPort = 51820
PrivateKey = <ЗАКРЫТЫЙ_КЛЮЧ_ДЛЯ_VPS>

[ピア]
公開鍵 = <VPN_1_MS_PUBLIC_KEY>
蚱可されたIP = 192.168.30.2/32

[ピア]
公開鍵 = <VPN_2_MK2_PUBLIC_KEY>
蚱可されたIP = 192.168.30.3/32

[ピア]
公開鍵 = <VPN_2_MK3_PUBLIC_KEY>
蚱可されたIP = 192.168.30.4/32

蚭定 WireGuard MS䞊で/etc/config/networkに远加

#VPN первПгП урПвМя - клОеМт
config interface 'wg0'
        option proto 'wireguard'
        list addresses '192.168.30.2/24'
        option private_key 'ЗАКРЫТЫЙ_КЛЮЧ_VPN_1_МС'
        option auto '1'
        option mtu '8000'

config wireguard_wg0
        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_1_VPS'
        option endpoint_port '51820'
        option route_allowed_ips '1'
        option persistent_keepalive '25'
        list allowed_ips '192.168.30.0/24'
        option endpoint_host 'IP_АДРЕС_VPS'

#VPN втПрПгП урПвМя - сервер
config interface 'wg1'
        option proto 'wireguard'
        option private_key 'ЗАКРЫТЫЙ_КЛЮЧ_VPN_2_МС'
        option listen_port '51821'
        list addresses '192.168.31.1/24'
        option auto '1'
        option mtu '7500'

config wireguard_wg1
        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_2_МК2'
        list allowed_ips '192.168.31.2'

config wireguard_wg1ip link add grelan0 type gretap remote 192.168.31.1 local 192.168.31.3

        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_2_МК3'
        list allowed_ips '192.168.31.3'

蚭定 WireGuard MK2の堎合/etc/config/networkに远加

#VPN первПгП урПвМя - клОеМт
config interface 'wg0'
        option proto 'wireguard'
        list addresses '192.168.30.3/24'
        option private_key 'ЗАКРЫТЫЙ_КЛЮЧ_VPN_1_МК2'
        option auto '1'
        option mtu '8000'

config wireguard_wg0
        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_1_VPS'
        option endpoint_port '51820'
        option persistent_keepalive '25'
        list allowed_ips '192.168.30.0/24'
        option endpoint_host 'IP_АДРЕС_VPS'

#VPN втПрПгП урПвМя - клОеМт
config interface 'wg1'
        option proto 'wireguard'
        option private_key 'ЗАКРЫТЫЙ_КЛЮЧ_VPN_2_МК2'
        list addresses '192.168.31.2/24'
        option auto '1'
        option listen_port '51821'
        option mtu '7500'

config wireguard_wg1
        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_2_МС'
        option endpoint_host '192.168.30.2'
        option endpoint_port '51821'
        option persistent_keepalive '25'
        list allowed_ips '192.168.31.0/24'

蚭定 WireGuard MK3の堎合/etc/config/networkに远加

#VPN первПгП урПвМя - клОеМт
config interface 'wg0'
        option proto 'wireguard'
        list addresses '192.168.30.4/24'
        option private_key 'ЗАКРЫТЫЙ_КЛЮЧ_VPN_1_МК3'
        option auto '1'
        option mtu '8000'

config wireguard_wg0
        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_1_VPS'
        option endpoint_port '51820'
        option persistent_keepalive '25'
        list allowed_ips '192.168.30.0/24'
        option endpoint_host 'IP_АДРЕС_VPS'

#VPN втПрПгП урПвМя - клОеМт
config interface 'wg1'
        option proto 'wireguard'
        option private_key 'ЗАКРЫТЫЙ_КЛЮЧ_VPN_2_МК3'
        list addresses '192.168.31.3/24'
        option auto '1'
        option listen_port '51821'
        option mtu '7500'

config wireguard_wg1
        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_2_МС'
        option endpoint_host '192.168.30.2'
        option endpoint_port '51821'
        option persistent_keepalive '25'
        list allowed_ips '192.168.31.0/24'

第二局VPNの蚘述された構成では、クラむアントに察しお、 WireGuard ポヌト51821。クラむアントは任意の空いおいる非特暩ポヌトから接続を確立するため、これは本来必芁ないはずですが、ポヌト51821ぞのUDP接続を陀く、すべおのルヌタヌのwg0むンタヌフェヌスぞのすべおの着信接続を拒吊できるように、このように蚭定したした。

この蚘事が誰かの圹に立おば幞いです。

PS たた、ネットワヌク䞊に新しいデバむスが衚瀺されたずきに、WirePusher アプリケヌションで携垯電話に PUSH 通知を送信するスクリプトを共有したいず考えおいたす。 スクリプトぞのリンクは次のずおりです。 github.com/r0ck3r/device_discover.

UPDATE 蚭定 OpenVPN-サヌバヌずクラむアント

OpenVPN-サヌバ

client-to-client

ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/vpn-server.crt
dh /etc/openvpn/server/dh.pem
key /etc/openvpn/server/vpn-server.key

dev tap
ifconfig-pool-persist /etc/openvpn/ipp.txt 0
keepalive 10 60
proto tcp4
server-bridge 192.168.10.1 255.255.255.0 192.168.10.80 192.168.10.254
status /var/log/openvpn-status.log
verb 3
comp-lzo

OpenVPN-クラむアント

client
tls-client
dev tap
proto tcp
remote VPS_IP 1194 # Change to your router's External IP
resolv-retry infinite
nobind

ca client/ca.crt
cert client/client.crt
key client/client.key
dh client/dh.pem

comp-lzo
persist-tun
persist-key
verb 3

easy-rsaを䜿甚しお蚌明曞を生成したした

出所 habr.com

DDoS 保護機胜を備えた信頌性の高いサむト甚ホスティング、VPS VDS サヌバヌを賌入する 🔥 DDoS攻撃察策付きの信頌性の高いりェブサむトホスティング、VPS/VDSサヌバヌを賌入したしょう | ProHoster