私はいくつかの理由でこの投稿を書くことにしました:
1)場合によっては、最初の100倍、何をする必要があるか、どこで読むことができるかを人に伝えるよりも、記事へのリンクを与える方が簡単な場合があります。
2)知識をシステムに取り込む必要がありました。 そして、あなたが他の人にそれを伝えているなら、これをするのが最善です。
3)純粋に利己的な関心-招待が欲しい。
だから。 問題の声明。
ルーターで閉じられた職場( W )があります。 自宅のコンピューター( H )があり、そこからWデスクトップに定期的にアクセスする必要があり、「白い」IPがありません。

ルーターの設定で何かを変更することはできません。 TeamViewer&Co.を使用してください -私たちのやり方ではありません。
ソリューションオプション。
サードパーティのプログラムを破棄する場合、残っているオプションは2つだけです。
- ポート5900を両側の白いIP( WまたはH )に「ストレッチ」します。 次に、VNCクライアントをこのアドレスに接続します。
- 中間サーバーを使用して接続を確立します。 このオプションの利点は、作業サーバーとホームサーバーのセキュリティシステムを変更する必要がないことです。
2番目のオプションの実装を示します。

そのため、簡単にするために、すべてのマシンがLinuxで動作することに同意します。 ポート転送はSSH接続を介して行われます。 したがって、単純なVDSでも中間サーバーとして適しています。
そしてもう1つの注意点-VDS上のSSHd は、異なるアドレスから転送されたポートへの接続を許可する必要があります。 これは重要です! これを解決するには、
GatewayPorts yes
をsshd_configに
GatewayPorts yes
ます。 その後
$ sudo /etc/init.d/ssh restart
サービスを
$ sudo /etc/init.d/ssh restart
ことを忘れないでください。
作業のスキームは次のとおりです。
1) Wマシンは、誰かが私に接続したいかどうかをチェックしますか? (以下の詳細)
2)そうでない場合は、何もしません。 はいの場合、 VDSサーバーへのSSH接続を確立します。
3)マシンHは VNCクライアントによってVDS:5900に接続され、デスクトップWにアクセスします。
4)利益!
別の質問-接続の必要性についてのフラグとして役立つものは何ですか? この問題を簡単に解決しました。 接続の必要性は、 VDSの開いているポート(たとえば、5995)の存在によって示されます。 ポートが開いている場合は、SSH接続を確立してポートを転送し、ポートが閉じている場合は、次のセッションまで不要なSSHチャネルを閉じます。
今、いくつかのスクリプト:
誰かがテーブルにアクセスしたいかどうかを確認しますか?
$ crontab -u root -e
*/15 * * * * /usr/bin/connect_flag.sh
15分ごとに確認してください。
python-eで開いているポートをチェックするためのスクリプト
import socket import subprocess def scan(host, port): while 1: sd = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: sd.connect((host, port)) except: return 0 else: sd.close() return 1 if __name__ == '__main__': if scan('yourServer', 5995): print 'start' else: print 'stop'
実際には、作業のロジックを実装するbashスクリプトconnect_flag.sh
#!/bin/bash export PATH=$PATH:/bin:/usr/bin:/usr/local/bin PID=`/bin/ps ux | awk '/ssh -N username/ && !/awk/ {print $2}'` FLAG=`/usr/bin/python /var/Script/portscan.py` PARAM="-N username@yourVDS -R 5900:127.0.0.1:5900" if [ $PID ]; then if [ $FLAG == 'stop' ]; then `kill $PID`; fi else if [ $FLAG == 'start' ]; then /usr/bin/ssh $PARAM & fi fi
以上です。 私が注意したいこと:
- VDSサーバー上-外部アドレスから転送されたポートへの接続を許可します。
- Hマシン上— VNCクライアントのみが必要です。 そしてそれだけです。
- Wマシンで-すべてのスクリプトが実行されます。 そして、それらをデバッグすることが最も難しい部分です。
- VDSサーバーで単純なnc -vv -l 5995を使用してポートフラグを開くことができます。
この記事を最後まで読んでくれたみんなに感謝します。