もう一度ファイアウォール-aによるポート転送について

こんにちは
私はいくつかの理由でこの投稿を書くことにしました:
1)場合によっては、最初の100倍、何をする必要があるか、どこで読むことができるかを人に伝えるよりも、記事へのリンクを与える方が簡単な場合があります。
2)知識をシステムに取り込む必要がありました。 そして、あなたが他の人にそれを伝えているなら、これをするのが最善です。
3)純粋に利己的な関心-招待が欲しい。

だから。 問題の声明。
ルーターで閉じられた職場( W )があります。 自宅のコンピューター( H )があり、そこからWデスクトップに定期的にアクセスする必要があり、「白い」IPがありません。
スキーマ-1
ルーターの設定で何かを変更することはできません。 TeamViewer&Co.を使用してください -私たちのやり方ではありません。


ソリューションオプション。
サードパーティのプログラムを破棄する場合、残っているオプションは2つだけです。


2番目のオプションの実装を示します。
スキーマ-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 


以上です。 私が注意したいこと:


この記事を最後まで読んでくれたみんなに感謝します。

Source: https://habr.com/ru/post/J116747/


All Articles