䟋ずしおSteamを䜿甚しお、別の囜のVPNからIPアドレスを持぀アプリケヌションを分離する

芁玄Linuxネットワヌク名前空間を䜿甚したネットワヌクレベルのアプリケヌション分離。 SSHトンネルの線成。

䌝統的に、蚘事のほずんどは理論ず退屈なスクリプトに捧げられたす-蚘事の終わりに。 曞き蟌みはWebブラりザヌを含むすべおのアプリケヌションに適甚できたすが、Steamは実隓の䞻題ずしお䜿甚されたす。

゚ントリヌの代わりに。 この写真を衚瀺したす。

147...思い出させるもの。 ただし、Habrは政治のためではありたせん。

Steamのゲヌムの䟡栌は地域によっお異なりたす。 地域-IP'shnikから。 ナヌロではなくルヌブルで䟡栌を蚭定したいずいう芁望がありたす。

これを行うには、tunデバむスずネットワヌク名前空間を䜿甚しおSSH経由でVPNを䜿甚し、他のすべおのネットワヌクデバむスからアプリケヌションを分離したす。

ネットワヌク名前空間


埓来、ナヌザヌ暩限で起動するアプリケヌションには、ネットワヌクぞのフルアクセスがありたす。 システムに存圚する任意のネットワヌクアドレスを䜿甚しおパケットを送信できたす。

さらに、ほずんどのデスクトップアプリケヌションは、システムのネットワヌクむンタヌフェむスが1぀だけであり、どのむンタヌフェむスを䜿甚するかを指定できないず想定しおいるため、むンタヌフェむスで䜕も理解したせん。 通垞、サヌバヌ゜フトりェアにはこのオプション送信者アドレスずしお䜿甚するアドレスがありたすが、デスクトップではこれは受け入れられない莅沢です。

耇数のむンタヌフェヌスVPNに関連するむンタヌフェヌスがある堎合、eth0 / wlan0ではなく、䜿甚する必芁があるこずをSteamに通知する暙準的な方法はありたせん。 より正確には、VPN内のすべおのトラフィックを「ラップ」できたすが、これは必ずしも望たしいずは限りたせん。 少なくずも、遅延の増加ず速床の䜎䞋VPNが超高速サヌバヌに぀ながる堎合でも、遅延の増加、トンネルからのオヌバヌヘッド、ロヌカルチャネルの固定幅により、TCPは速床を萜ずす必芁がある䜍眮に眮かれたす。 最倧で、「ロシアのVPN経由で賌入する」こずず、すべおのトラフィックをそこに通すこずです。 Roskomnadzorによる反察や自由な思考からの保護を埗るために VPN を䜿甚するこずに、私はたったく惹かれたせん。

これらの条件䞋では、1぀の特定のアプリケヌションず特定のネットワヌクむンタヌフェむスに1぀を残したいずいう倧きな芁望がありたす。 䞀。 このアプリケヌションのニヌズのみに合わせお構成されおいたす。

Linuxでこの問題を解決するために、かなり長い間2007幎以来、ネットワヌク名前空間、぀たりネットワヌクの名前空間ず呌ばれる技術がありたす。 テクノロゞヌの本質䞀皮の「ディレクトリ」がネットワヌクむンタヌフェヌス䞊に䜜成され、各ディレクトリは耇数のネットワヌクむンタヌフェヌスずアプリケヌションを持぀こずができたす。 特定のネットワヌク名前空間で自身を怜出するアプリケヌションは、このスペヌスに割り圓おられおいるネットワヌクむンタヌフェむスのみを䜿甚および衚瀺できたす。

次の図は、䜕が起こっおいるのかを説明しおいたす。


もちろん、このような豊富な構成はデスクトップではありたせんが、䜕が起きおいるのかを玔粋な圢で説明するこずができたす。

異なる名前空間は異なる色で匷調衚瀺されたす。 指定されたむンタヌフェヌスは、指定された名前空間からのみ利甚可胜であり、他には䜕もありたせん。 たずえば、赀のネヌムスペヌスは、tap1、veth1およびlo、青はeth1、eth2、loおよびveth0、緑はtun0およびloのみにアクセスできたす。 ネヌムスペヌスの倖では、eth0が残り、ネむティブむンタヌフェむスはbr1、tap0、loです。

各名前空間には独自のloがあるこずに泚意しおください loの青い名前空間でmysqlをリッスンする堎合、緑のおよび青以倖の名前空間からはアクセスできたせん。 おそらくこれが最も楜しい機胜です。 2番目の機胜は、異なるむンタヌフェむスの異なる名前空間で同じIPアドレスを䜿甚できるこずであり、䜕もありたせん。 もちろん、各名前空間のルヌティングテヌブルは異なりたす。

熱心な読者は、仮想化の粟神を感じたした。 はい、もちろんです。 ネットワヌク名前空間はこのレベルの他のテクノロゞヌず䞀緒にLXCLinuxでのコンテナヌ仮想化の重芁な郚分です。 しかし、openvzや他の倚くの同様のテクノロゞヌずは異なり、LXCコンポヌネントは非垞に䞀般的であるため、スタンドアロンツヌルずしお䜿甚できたす。 そしお、これは正しいUnixの方法です。誰もが1぀だけを行いたすが、それは良いこずです。 玔粋䞻矩者は「すべおをコアに抌し蟌むのは悪い」ず蚀うかもしれたせん。

珟圚のネットワヌクの倖郚に぀ながるtun / tapむンタヌフェむスを䜿甚しおアプリケヌションを終了するず、最も興味深い画像が埗られたす䞊の図では、緑色の名前空間に孀立したtunがありたす。 tunがコンピュヌタヌの倖郚vpnサヌバヌなどにある堎合、アプリケヌションはコンピュヌタヌが実際に持っおいるネットワヌク蚭定を理解する方法がありたせん。 たずえば、VPNがキプロスからロシアに぀ながる堎合、緑色の名前空間で実行されおいるアプリケヌションはすべおロシアからアドレスを受け取り、ロシアにあるかのようにネットワヌクに移動したす。 実際、これはSteamがロシアのIPを所有しおいるず信じ、ゲヌムを半額で販売するこずに同意するために必芁なものです。

囜の定矩では、Steamは少し奇劙です。 VPNがない堎合、Steamは時々䟡栌をナヌロで、時にはルヌブルで衚瀺し、パタヌンを理解できたせんでした。 ロシアのVPNはすべおの質問を削陀したした-䟡栌は垞にルヌブルです。

ネットワヌク名前空間の操䜜に関する簡単なヒント蚘事の終わり近くの実甚的なヒント
ip netnsネットワヌク名前空間のリストすべおのip netnsコマンドでip netに短瞮できたす
ip netns add/delete fooずいう名前のネットワヌク名前空間を䜜成/削陀
ip netns exec foo /usr/bin/bin指定されたネットワヌク名前空間でプログラムを実行したすすでに実行䞭のアプリケヌションをドラッグできないこずに泚意しおください
ip link set eth99 netns fooむンタヌフェむスを指定されたスペヌスにip link set eth99 netns fooたす

そしお、いく぀かのトリック

ip netns exec foo ip link -fooスペヌス内のむンタヌフェヌスのリスト
ip netns exec foo tcpdump -ni eth99 -tcpdump 泚意、execの特定の䜜業により、Ctrl-Cを抌した埌にのみ画面ぞの出力が衚瀺されたす。 迷惑な堎合-以䞋を参照しおください。
sudo ip netns exec foo login -f username名前空間内でログむンを実行したす。 ログむンしたナヌザヌは、端末/グルヌプリヌダヌの蚭定などが完党に構成された状態で、指定されたネヌムスペヌスで既に動䜜しおいたす。

SSHを介したVPN組織


冗長性のために、openvpn、openswan、およびその他のアプリケヌションが奜きではありたせん。 私はいく぀かの状況で圌らの必芁性を認識しおいたすが、できるずきはSSHを䜿甚しようずしたす。 いく぀かの理由がありたす。
1SSHは、どのサヌバヌでもすぐに䜿甚できたす。
2SSHはgre / udpではなくTCPを䜿甚したす。゚キゟチックな堎所から䟡倀のないWiFiで接続する必芁がある堎合は、ポヌト22および443のsshが䜿甚されたす。 22番目のポヌトをただ閉じるこずができる堎合、443-間違いなく、 HTTPSはそれを䜿甚したすブロックされた堎合、inするハムスタヌはすべおをGoogle / Facebookなどに送りたす
3届く範囲のマシンにSSHクラむアントがありたす。぀たり、Unixマシンから必芁なトンネルを解陀できたす。 3〜5ステップ-窓付き。
4トンネリング蚭定の皋床は簡単に調敎できたす。 socks-proxyのみが必芁な堎合は、l2トンネルを発明したせん。
5远加のシャヌマニズムなしで、耇数の䞊列接続を任意の組み合わせで䜿甚できたす-異なるクラむアントからの1぀のサヌバヌぞ、1぀のクラむアントからの異なるサヌバヌぞなど。 完党に頭がおかしい人は、䞀般的に、閉じたポヌトを持぀ハヌドコアnatの背埌の䞖界の5番目のポむントの3gに座っおいる孀独な小さなパによっお、倧陞ずネットワヌクを単䞀のL2セグメントに接続できたす。 そしお、それも機胜したす䞖界の5番目のポむントである3gが、L3を介しお飛んでいるブロヌドキャストキャスト/マルチキャストを消化できる皋床たで。

䞻な理由はさらに単玔ですが、SSHはフルタむムのツヌルキットであり、必芁なすべおを実行できたす。 なぜ他に

だから、SSHトンネルの理論

TUNむンタヌフェヌス


TUNむンタヌフェヌスは非垞にシンプルです。システム内に仮想ネットワヌクむンタヌフェヌスtun0、tun1などを䜜成し、他の「゚ンド」ずずもに、それを䜜成したプログラムのfdファむル蚘述子を怜玢したす。 プログラムはfdからのトラフィックをどうするかを決定したす。 たた、システム内のアプリケヌション自䜓が、ネットワヌクむンタヌフェむスの凊理方法を決定したす。

SSHの堎合、SSHクラむアントにその郚分のtunむンタヌフェヌス、その郚分のSSHサヌバヌを䜜成し、それらを接続するように指瀺したす。 䞀方ではクラむアントからトラフィックが着信し、他方ではサヌバヌからトラフィックが発信されたこずがわかりたす。 そしおその逆。 トンネルずは䜕ですか VPNを䜿甚しない理由 SSHはトラフィックを暗号化する方法も知っおいるので、すぐに䜿えるV​​PNが埗られたす。 SSH内では、これはチャネルず呌ばれ、倚重化されたすが、あたり気にしたせん。

ここに䜕が起きおいるかを簡単に瀺したす


SSHサヌバヌからの協力が必芁なこずに泚意しおください。 以䞋のセクションでサヌバヌ䞊にトンネルを䜜成する蚱可に぀いお説明したすが、NAT蚭定、アドレス指定などの詳现もあり、Freedom矢印が機胜するようにしたす。

マヌゞンに関する泚意tunむンタヌフェヌスに加えお、タップむンタヌフェヌスもありたす。 L2セグメントを結合できたす。 これは地獄、恐怖、゜ドミヌ、無駄ですが、誰かが本圓にやりたい堎合は、自宅の完成したマシンぞのSSH接続を䜿甚しお、異なるデヌタセンタヌからのいく぀かのネットワヌクを結合しようずするこずができたす。 うたくいきたす結果を保蚌するこずはできたせん。

実践的な行動



準備
  1. SSHキヌをサヌバヌのルヌトにコピヌしたすキヌがない堎合は、 sudo ssh-keygen生成しsudo ssh-keygen 。 通垞、キヌをロヌカルルヌトに䜜成したす。これにより、キヌず自分のキヌを混同しないようになりたす。 キヌは、 sudo ssh-copy-id root@serverコマンドでsudo ssh-copy-id root@server 。
  2. リモヌトサヌバヌ䞊のSSHがトンネルの䜿甚を蚱可されおいるこずを確認したす。 /etc/ssh/sshd_config PermitTunnel倉数のコメントを倖しおyes蚭定する必芁がありyes 。
  3. 任意の番号を遞択したすecho $ RANDOM。 これがトンネル番号になりたす。 それを芚えおおいおくださいたたは、42などの別のお気に入りの番号を䜿甚しおください。
  4. リモヌトサヌバヌをセットアップしたす。 私は他のディストリビュヌション/ OSのプロセスであるdebian / ubuntuのために曞いおいたす-それらのためのネットワヌクのセットアップに関するドキュメントを参照しおください。 ファむル/ etc / networking / interfacesで、次の行を䜜成したす。
     allow-hotplug tun42 auto tun42 iface tun42 inet static address 100.64.42.1 netmask 255.255.255.0 pre-up iptables -A POSTROUTING -t nat -s 100.64.42.0/24 -j MASQUERADE post-down iptables -D POSTROUTING -t nat -s 100.64.42.0/24 -j MASQUERADE 

    これにより、tun42むンタヌフェむスがサヌバヌに衚瀺されるたびに、構成されたむンタヌフェむスを自動的に受信できたす。 同時に、NATがトンネルからパケットをブロヌドキャストできるようにし、むンタヌフェむスが消えたらすぐにオフにしたす。
  5. サヌバヌでルヌティングを有効にしたしょう。 /etc/sysctl.d/enable_routing.conf
     net.ipv4.conf.all.forwarding = 1 


ほが完了です。 蒞気を流すだけです。 ロヌカルマシンで以䞋に説明するすべおのもの。
  1. トレむアむコンを含むSteamの以前のコピヌをすべおオフにしたす
  2. サヌバヌに接続したす sudo ssh -w 42:42 root@server 。 -wオプションは、tun42をロヌカルで䜜成し、リモヌトtun42ず䜜成するこずにより関連付けるこずを指瀺したす。
  3. 隣接するコン゜ヌルで
     xhost + sudo ip net add steam sudo ip link set netns steam dev tun42 sudo ip net exec steam ip addr add 100.64.42.2/24 dev tun42 sudo ip net exec steam ip link set up dev tun42 sudo ip net exec steam ip route add default via 100.64.42.1 sudo ip net exec steam login -f $USER export DISPLAY=:0 steam 

    xhost +は、 xhost + Xサヌバヌに接続できるようにしたす泚意しおください。 パラノむアはman xhostを孊習しお、より正確なルヌルを指定できたす。

    ip net addおよびip net execは、 ip netns addおよびip netns exec -ネットワヌク名前空間を䜜成し、䜜業䞭の新しいナヌザヌセッションを開始したす。 export DISPLAY=:0は、「最初のXサヌバヌを䜿甚したす。 デフォルトでは、この倉数はログむン時にリセットされ、それがないず、steamはXサヌバヌに接続できたせん



実際には、それだけです。 出口では、Steamのロシア䟡栌ずロシア怜閲がありたす。 幞いなこずに、それは蒞気を保護するだけであり、次のりィンドりのブラりザは非垞に高速ではなく、非垞に無料のCypriotむンタヌネットを䜿甚したす。

次の郚分で

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


All Articles