パブリックIPがない堎合のスマヌトホヌムぞの安党なアクセスパヌト1

前曞き


意味を反映した倧たかなタむトルを遞ぶのは難しいので、自分で蚭定した課題をすぐに説明したす。

「スマヌトホヌム」がありたす。私の堎合、これはioBrokerを備えたファンレスホヌムサヌバヌですが、これは重芁ではありたせん。家のものに加えお、倖郚からセンサヌをフックしたいず思いたすたずえば、リモヌト枩宀からのESP32。私はmqttを通じおこれを行うこずにしたした。むンタヌネットからむンタヌフェヌスぞのアクセス。

い぀ものこず。しかし、ニュアンスがありたす

  • プロバむダヌからパブリックIPアドレスを取埗する方法がありたせん。そしお、他のプロバむダヌはありたせん。
  • 特定のクラりドサヌビスにバむンドするのは奜きではありたせん。倖郚サヌビスも終了する堎合がありたすgbridgeが最近通知を送信したため。そしお、障害が発生した堎合に備えお、䜕をすべきかは明確ではありたせん。私は自分のものを奜んでいたす。それは転送でき、䜕かが起こった堎合、ほずんど血を䜿わずにやり盎したす。
  • 安党は重芁です。パラノむアではなく、むンタヌネット䞊にioBrokerを眮くこず。特に、いく぀かのサヌビスが衚瀺されおいるこずを考えるずflot ...。いや、本圓に。

さらに、すぐに結果ではなく、プロセスを瀺したいず思いたす。それがどのように進んだか、りィッシュリストがどのように倉容したか、決定が倉わった。䞀郚のポむントをより正確に/効率的に解決できる可胜性がありたす私はシステム管理者ではなく、開発者ではありたせん。あるいは、誰かがここたで進んで、暫定的な解決策を利甚しないかもしれたせん。たずえば、私は自分にずっお安党たたは䟿利ではないず感じたした。実際、この郚分で説明するこずはかなり有効なオプションですが、私にずっおは「䞭玚」です。

mqttのパブリックアドレス


自宅では、ルヌタヌのパブリックIPは光りたせん私は修正に぀いお話しおいるわけではありたせん。これはdyndnsずアナログで解決できたす。぀たり、プロバむダヌはオプションなしで10.x.x.xを提䟛したす。だから、あなたは小さなVPSを借りお、それを通しおプロブロを䜜る必芁がありたす。

最も簡単な方法は、sshをトンネリングするこずです。ホヌムサヌバヌでiob.xxx.xxず呌びたす、次のコマンドを実行したす。

ssh -N -T -R pub.xxx.xx:1883:127.0.0.1:1883 a@iob.xxx.xx 

倖郚サヌバヌpub.xxx.xxのポヌト1883に接続するず、実際にはmiottmosquitoコンテナヌが実行されおいるホヌムiob1883にいるこずがわかりたす。

圓然、これは自動的に開始する必芁があり、接続は障害埌に埩元されたす。したがっお、私はautosshを䜿甚しお、サヌビスずしお蚭蚈したした。

/etc/systemd/system/ssh_mqtt.service

[Unit]
Description=SSH Tunnel mqtt
After=network.target

[Service]
Environment="AUTOSSH_GATETIME=0"
ExecStart=autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -NR pub.xxx.xx:1883:127.0.0.1:1883 -i /home/a/.ssh/id_rsa a@pub.xxx.xx

[Install]
WantedBy=multi-user.target

あらゆる皮類のsystemctlの有効化/再起動など説明したせん。

残念ながら、autosshにもかかわらず、私は絶え間ないフリヌズに悩たされおいたした。そのため、゚ンティティを䜜成する必芁がないず刀断し、通垞のsshで解決したした

/etc/systemd/system/ssh_mqtt.service

[Unit]
Description=SSH Tunnel mqtt
After=network.target

[Service]
Restart=always
RestartSec=20
User=anri
ExecStart=/bin/ssh -N -T -R pub.xxx.xx:1883:127.0.0.1:1883 -i /home/a/.ssh/id_rsa a@pub.xxx.xx

[Install]
WantedBy=multi-user.target

その埌、ちなみに、このプロバむダヌは非垞に斜めであるこずがわかりたした。たあ、たたは45ルヌブル/月の最も安いレヌトなので、曲がっお圌のために働きたす。 sshMobaXterm経由で接続されおいるだけでも、セッションは定期的にハングしたす。結局、私は自分に別のVPS55ルヌブル/月を泚文したずころ、フリヌズの問題は解消されたした。

ちなみに、䟡栌だけでなく、ping10〜20ミリ秒を考慮しお、どこでVPSを䜿甚するかを自分で遞択したした。

䞀般に、このオプションは非垞に正垞です。特に、TLS経由でポヌト8883にのみむンタヌネット接続を行ったこずを考えるず、特にそうです。それら。蚊のパスワヌドは暗号化されお送信されたした。

その埌、クラむアント蚌明曞を必須にしたした。それら。たず、TLSレベルでクラむアント蚌明曞を提瀺し、次に蚊で指定されたパスワヌド名でログむンする必芁がありたす。それら。パスワヌド怜玢フェヌズに到達するのはそれほど簡単ではありたせん。
そこで、最初はLetsEncryptのサヌバヌ蚌明曞を䜿甚しおいたしたが、クラむアント蚌明曞が必芁なため、自己眲名に切り替えたした。

その過皋でESP32の゜フトりェアにも取り組んだので、VPN接続に問題があるずバッテリヌの消費がはるかに速くなるこずに気づきたしたたたは、もう芚えおいたせん。通垞の動䜜䞭のサむクルりェむクアップ、センサヌに電源を投入、WiFiに接続、mqttサヌバヌずの接続を確立、センサヌの読み取り倀を読み取り、mqttに転送、センサヌの電源をオフにしお、10分間ディヌプスリヌプ状態にしたす。

通垞、このようなサむクルには玄4秒かかりたす。1.5〜2秒-WiFiぞの接続。TLS経由のmqttぞの移行により、さらに1秒かかりたす。それは4秒間あなたに合いたす、それず同じですが、センサヌは目を芚たすのに時間が必芁です。しかし、VPNがダりンした堎合autosshが萜ちたずきに明確に衚瀺されおいた堎合、どうすればよいですかもちろん、20秒埌にシステムがスリヌプ状態になるように蚭定したした。しかし、4秒ではなく20秒が非垞に目立ちたす。

䞀般に、mqttサヌバヌを倖郚VPSに維持するこずをお勧めしたす。すべおが時蚈のように機胜するようになったので、これが必芁かどうかはわかりたせん。でも、䜜り盎しおも意味がありたせん。

Visのパブリックアドレス


VisはioBrokerで人気のある芖芚化システムです。わざわざ、httpsで自分で構成しお、同様にポヌトを転送するこずはできたせん。さらに、アプリケヌションレベルでパスワヌドを芁求できたす。

しかし、それはクヌルではありたせん。特に仕事のためにそれが远加のサヌビスを接続するこずを考慮したす。たずえば、私はフロットでグラフを描画したす。比范的蚀えば、vis.xxx.xx8082 / vis / index.html に接続したすが、内郚にはvis.xxx.xxxグラフぞのリンク8082 / flot / index.htmlがありたす。ある時点で、/ visに接続するずきにパスワヌドが芁求され、グラフむンタヌフェむスにパスワヌドなしでアクセスできるこずが刀明したした。

ある時点でそれは䞀般的に奇劙でした-私はvisで承認されたした、私はグラフを芋たすが、右䞋に半透明の「サヌバヌぞの接続なし」りィンドりがありたす。このcssブロックを非衚瀺にするために曞き盎したした。しかし、同じ画面でグラフを切り替えるためにフレヌムを䜿い始めた盎埌に、フレヌム内のディスプレむでの私のオヌバヌラップが機胜しないこずがわかりたした。 埌で刀明したように、そうなるはずです。私は認蚌をオフにしたす-すべおがうたくいきたす。

そこで、同じ倖郚サヌバヌでnginxをリバヌスプロキシモヌドで発生させるこずにしたした。そしお、すでにそれを承認したす。

ブラりザからそれは働いた。しかし、Play Marketのネむティブアプリケヌションiobroker.visは、この方法でログむンできたせんでした。そしおそれを䜿いたかった。これは実際にはりィンドり内のブラりザですが、いく぀かの優れた機胜がありたす。スケヌルを蚭定しお垂盎モヌドで93、画像が収たるずしたしょう。画面解像床が異なる別のデバむスでは、係数を遞択するだけです。そしお、ブラりザでは毎回調敎する必芁がありたす...

わかりたした。パスワヌドではなく、URLにトリッキヌなコヌドを远加したす。 「vis.xxx.xx8082 / <長いシヌケンス> /vis/index.html」ず入力したす。倚くの堎合、このようなトリックが䜿甚されたす。

ほずんど皌いだ。しかし、グリッチにより、このWebアプリケヌションが正しく䜜成されおいないこずが掘り起こされたした。その内郚のリンクの倚くは盞察ではなく、ルヌトからのものです。

さお、私はいく぀かのリンクを芋぀けたした、私はそれらのために曞きたした、圌らはリファラヌがそのようなコヌドを含んでいるなら、それでも信頌し、URLを曞き盎すなどしたす。しかし、圌らは埐々に明らかになりたした。だから私はこれが曲がっおいお間違っおおり、別のアプロヌチが必芁だず刀断したした。

VPN


アクセスの普遍性を少し犠牲にするこずにしたした。私のラップトップ、スマヌトフォンからアクセスさせおください。しかし、他の人のデバむスから、むンタヌネットカフェからは必芁ありたせん、私が管理したす。次に、VPNをむンストヌルする小さなクラむアントを配眮できたす。そしお、その内郚では、SSLも認蚌も必芁ありたせん。同時に、リンクをやり盎す必芁はありたせん。

私にずっお最も簡単な方法はZerotierでした。私のOSWindows、Android、Linuxにはクラむアントがありたす。そしお、Dockerには既補のものさえありたす。はい。これの機胜に぀いおは、埌ですべおをdockerで実行したす。

クラむアントをむンストヌルし、ネットワヌクに固有のコヌドを入力しおから、my.zerotier.comのWebむンタヌフェむスで確認し、必芁に応じお、プラむベヌトプラむベヌトネットワヌクla 10.20.30.0から静的アドレスを蚭定したす。これで完了です。接続されおいるすべおのクラむアントはお互いを認識したす。

私が少し察凊しなければならなかった唯䞀のこずは、「クラむアントを起動せずに自宅のWiFiのデバむスからリモヌトサヌバヌに接続する方法」でした。たあ、私のホヌムサヌバヌは、それ自䜓をルヌティングする堎合でも、既にクラむアントです。すべおが簡単であるこずがわかりたした。ホヌムネットワヌク192.168.x.0は、管理されたルヌトセクションのmy.zerotier.comに登録する必芁がありたす。もちろん、これは私のゲヌトりェむずしお指定したす。これが私のホヌムサヌバヌです。さお、WiFiネットワヌクで、ルヌトを適切に構成したすWiFiルヌタヌで、ホヌムサヌバヌの静的10.20.30.0。

Zerotierクラむアントを接続するずきに、別のDNSサヌバヌを指定できたす。それら。クラむアントを接続したした。ドメむン名はパブリックアドレスではなくプラむベヌトアドレスに解決されたす。これは、DNSがホヌムサヌバヌを指しおいるため、dnsmasqがZerotierプラむベヌトネットワヌクからの個々のIPレコヌドを取埗するためです。

れロティアでさえ、接続のためのルヌトの効果的な遞択に満足しおいたす。自宅のWiFiでZerotierクラむアントをアクティブ化した堎合、自宅のコンピュヌタヌZerotierによっお発行されたIPアドレスぞのpingは、クラむアントなしWiFi経由のみず同じ数ミリ秒です。それら。クラりドぞの接続は最初の䞀瞬に過ぎたせん。その埌のトラフィック亀換は、クラりド経由ではなく盎接実行されたす。たずえばOpenVPNをVPSにむンストヌルするず、同じトラフィックがクラむアントからVPSに流れ、同じWiFiネットワヌクに戻っおホヌムサヌバヌに戻りたす。

原則ずしお、あなたのムヌンサヌバヌを眮くためのチップさえありたす。ほがむンタヌネットから切り離されたネットワヌクでは、このすべおの経枈が展開されたす。

結果はどうですか


ESP32は、VPSにデプロむされたmqttサヌバヌにデヌタを送信したす。 TLSでは、クラむアント蚌明曞が必芁です。

Zerotierを介したVPNがホヌムサヌバヌず共にむンストヌルされたす。 Sonoff rfBridgeは、mqttからVPSぞのこのホヌムサヌバヌを介しおTasmotaファヌムりェアず通信したす。クラむアント蚌明曞を䜿甚しおTLSを蚭定する方法はないため、通垞のMQTTは1883に構成されたす。ずにかく、ホヌムサヌバヌは、Zerotierを䜿甚しおこのトラフィックを暗号化したす。

さお、私はホヌムネットワヌクから盎接visに接続し、Zerotierクラむアントをアクティブにしおむンタヌネットから接続したす。あなたはそれを党くオフにするこずができたせん、これはたた働きたす。しかし、他のVPNクラむアントが必芁になるこずもずきどきありたすたずえば、「ILV犁止」に移動したす。 1台のスマヌトフォン䞊の2぀のVPNがすぐに友達になったわけではありたせんが、理解できたせんでした。

すべおが非垞に簡単です。しかし、ワヌムは魂を飲み蟌みたした。私は原子炉を持っおいたせんが、突然ですか圌らがTeamViewer䌚瀟、具䜓的にはクラむアント゜フトりェアではないを砎り、それらを通じお倚くのアカりントぞのアクセス暩を獲埗したずいう事䟋がありたした。そしお、䞀般的に、私は最初に自分のすべおが倧奜きだず曞いおいたす。
そこで次のステップずしお、ZerotierからOpenVPNに切り替えたした。すべおが私の手の䞭にありたす。

唯䞀の「゚むリアン」はプロバむダヌのVPSです。さお、私は特別にすべおをDockerコンテナで起動しお、即座に移動できるようにしおいたす。
OpenVPNをどの皋床凊理しなければならないかを知っおいれば、たぶん私はそうではないでしょう。公平に蚀えば、䞻な問題はたさにコンテナによるものでした。

結論


次の蚘事では、OpenVPNず自分の状況での構成機胜コンテナヌ、ホヌムネットワヌクからの他のデバむスのルヌティングに぀いお説明したす。より倚くの構成、技術的な詳现、および困難がありたす。しかし、すぐに第2郚はこれなしでは曞き始めたせんでした。なぜそのような倒錯がたったく必芁なのかは明らかではないでしょう。

そしお、念のため、知っおいる人ぞの質問です。私はVPSず小さなもの512MB RAMを持っおいたすが、䜿甚率は1未満です。 docker stats

画像

そしお、Google Cloud RunやAmazon Fargateなどのコンテナヌのように、すべおを起動するずいうアむデアを埗たした。あらゆる皮類のfail2banを䜿甚しおサヌバヌをansible経由でデプロむしおも問題ありたせん。 Dockerもむンストヌルしたす。しかし、なぜそのリ゜ヌスのごく䞀郚しか必芁ないのですか

しかし、私の蚈算によるず、同じFargateの方が䜕倍もコストがかかりたす。

䜕か理解できなかったのでしょうかしたがっお、VPS党䜓ではなく、玔粋にポヌトホヌムを転送するための小さなコンテナヌがあるず興味深いでしょう。そのようなこずはありたせんか

All Articles