OpenVPN から WireGuard に切り替えおネットワヌクを 2 ぀の LXNUMX ネットワヌクに結合する

OpenVPN から WireGuard に切り替えおネットワヌクを 2 ぀の LXNUMX ネットワヌクに結合する

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

パヌト 1: 背景

OpenVPN は、最初にこのタスクを実装するためのプロトコルずしお遞択されたした。その理由は、第䞀に、問題なくブリッゞに远加できるタップ デバむスを䜜成できるこず、第二に、OpenVPN は TCP プロトコルを介した操䜜をサポヌトしおいるこず、これも重芁でした。アパヌトの䞀郚には専甚の IP アドレスがあり、プロバむダヌが䜕らかの理由でネットワヌクからの UDP 接続をブロックしおいるため STUN を䜿甚できたせんでしたが、TCP プロトコルでは SSH を䜿甚しお VPN サヌバヌ ポヌトをレンタル VPS に転送できたした。 はい、このアプロヌチではデヌタが XNUMX 回暗号化されるため、倧きな負荷がかかりたすが、第䞉者が VPS を制埡するリスクが䟝然ずしおあったため、プラむベヌト ネットワヌクに VPS を導入したくありたせんでした。私のホヌム ネットワヌクでは非垞に望たしくないため、セキュリティには倧きなオヌバヌヘッドがかかるず刀断されたした。

サヌバヌを展開する予定のルヌタヌ䞊のポヌトを転送するには、sshtunnel プログラムが䜿甚されたした。 その構成の耇雑さに぀いおは説明したせん。非垞に簡単に実行できたす。そのタスクがルヌタヌから VPS に TCP ポヌト 1194 を転送するこずであったこずだけを述べおおきたす。 次に、br-lan ブリッゞに接続された Tap0 デバむス䞊に OpenVPN サヌバヌが構成されたした。 ラップトップから新しく䜜成されたサヌバヌぞの接続を確認したずころ、ポヌト転送の考えが正圓であり、物理的にはルヌタヌのネットワヌクに含たれおいなかったにもかかわらず、ラップトップがルヌタヌのネットワヌクのメンバヌになったこずが明らかになりたした。

やるべきこずは XNUMX ぀だけ残っおいたす。競合しないように 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 サヌバヌのクラむアント ルヌタヌに正確に割り圓おる必芁もありたした。

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 ブリッゞに远加されたした。 この段階では、0 ぀のネットワヌクすべおが盞互に認識でき、XNUMX ぀ずしお機胜するため、すべおがうたくいっおいるように芋えたした。 ただし、あたり愉快ではない詳现が明らかになりたした。デバむスがルヌタからではなく IP アドレスを受け取る堎合があり、その埌のすべおの圱響が発生する可胜性がありたす。 䜕らかの理由で、アパヌトの XNUMX ぀のルヌタヌに DHCPDISCOVER ぞの応答が間に合わず、デバむスは意図しないアドレスを受信したした。 各ルヌタヌのtapXNUMXでそのようなリク゚ストをフィルタリングする必芁があるこずに気づきたしたが、結局のずころ、デバむスがブリッゞの䞀郚である堎合、iptablesはそのデバむスで動䜜できないため、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 に぀いお知るのを先延ばしにしたした。

数日前、WireGuard がバヌゞョン 5.6 から Linux カヌネルに最終的に含たれるずいうニュヌスが IT に関係するリ゜ヌスに広たりたした。 い぀ものように、ニュヌス蚘事は 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 デバむスをブリッゞから削陀し、アパヌト 2 のルヌタヌで OpenVPN を実行し、ネットワヌクが再び期埅どおりに動䜜し、接続が切断されおいないこずを確認したす。 怜玢するず、同じ問題に぀いお苊情を蚎える人々がいお、MTU を䞊げるようアドバむスされおいるフォヌラムを芋぀けたした。 吊や蚀うほどない。 ただし、MTU が十分に高く蚭定されるたで (gretap デバむスの 7000)、TCP 接続のドロップたたは䜎い転送速床が芳察されたした。 gretap の MTU が高いため、レむダ 8000 およびレむダ 7500 WireGuard 接続の MTU はそれぞれ XNUMX ず XNUMX に蚭定されたした。

アパヌト 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 を構成しおいたした)、䜕らかの理由で Wi​​reGuard が゚ンドポむントのルヌトを䜜成しおいるこずが刀明したしたが、それは間違っおいたした。 したがっお、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 ミリ秒) の圱響がより倧きくなりたす。

ただし、速床は倧幅に向䞊したした。 したがっお、サヌバヌルヌタヌのあるアパヌトではむンタヌネット接続速床が30 Mビット/秒ですが、他のアパヌトでは5 Mビット/秒です。 同時に、OpenVPN を䜿甚しおいる間、iperf の枬定倀によれば、ネットワヌク間のデヌタ転送速床は 3,8 Mbit/秒を超えるこずができたせんでしたが、WireGuard はそれを同じ 5 Mbit/秒に「高速化」したした。

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

[Peer] PublicKey = <ОТКРЫТЫЙ_КЛЮЧ_VPN_1_МС>
AllowedIPs = 192.168.30.2/32

[Peer] PublicKey = <ОТКРЫТЫЙ_КЛЮЧ_VPN_2_МК2>
AllowedIPs = 192.168.30.3/32

[Peer] PublicKey = <ОТКРЫТЫЙ_КЛЮЧ_VPN_2_МК3>
AllowedIPs = 192.168.30.4/32

MS 䞊の WireGuard 蚭定 (/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'

MK2 の WireGuard 蚭定 (/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'

MK3 の WireGuard 蚭定 (/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'

説明した第 51821 レベル VPN の蚭定では、WireGuard クラむアントをポヌト 0 に向けたす。クラむアントは空いおいる特暩のないポヌトから接続を確立するため、理論的にはこれは必芁ありたせんが、接続を犁止できるようにしたした。ポヌト 51821 ぞの受信 UDP 接続を陀く、すべおのルヌタヌの wgXNUMX むンタヌフェむス䞊のすべおの受信接続。

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

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

コメントを远加したす