匿名VPNを使用していますが、内部コンピューターへのSSHアクセスが必要です。
SSH経由で内部コンピューターにアクセスするにはどうすればよいですか? ssh 98.123.45.6を実行すると、接続がタイムアウトします。
周りを検索したところ、iptablesルールやルーティングルールを設定したり、sshd_configにListenAddressを追加したりするための推奨事項が見つかりました。これらのどれが私のケースに当てはまりますか?
これが私のルートです:
カーネルIPルーティングテーブル 宛先ゲートウェイGenmaskフラグメトリックRef Use Iface 10.115.81.1 10.115.81.9 255.255.255.255 UGH 0 0 0 tun0 10.115.81.9 * 255.255.255.255 UH 0 0 0 tun0 50.1.2.3-sta ddwrt 255.255.255.255 UGH 0 0 0 eth0 192.168.1.0 * 255.255.255.0 U 202 0 0 eth0 169.254 .0.0 * 255.255.0.0 U 204 0 0 vboxnet0 loopback * 255.0.0.0 U 0 0 0 lo default 10.115.81.9 128.0.0.0 UG 0 0 0 tun0 128.0。 0.0 10.115.81.9 128.0.0.0 UG 0 0 0 tun0 default ddwrt 0.0.0.0 UG 202 0 0 eth0
この問題を解決するには、両方 iptablesとルーティングルールを設定する必要があります。発生している特定の問題は、発信SSHパケットがイーサネットインターフェイスではなく匿名VPNトンネルインターフェイス経由でルーティングされていることです。これは、VPNソフトウェアがルーティングルールを設定して、未処理のすべてのトラフィックをトンネルインターフェイス経由で送信するために発生します。ネットワークトラフィックの匿名化に適しています。お使いのコンピューターへのSSH接続を確立するための悪い。
この問題を解決する方法はいくつかありますが、同じ状況で私のために働いた方法を紹介します。これが私たちがする必要があることです:
注:以下を実行しているときにRaspbianで作業していたため、ディストリビューションに合うようにmightコマンドを少し調整する必要があります。
まず、iproute2のテーブル定義ファイルを調べます。既存のルールテーブルの名前や数を使用しないようにしたいと思います。
cat /etc/iproute2/rt_tables
あなたはおそらくこれらの線に沿って何かを見るでしょう:
# reserved values
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
新しいルールテーブルの任意の番号と名前を選択します-上記で使用されていないもの。この回答の残りの部分では、番号201と名前novpn
を使用します。
定義を定義ファイルに直接追加するか、任意のテキストエディターで編集します。
echo "201 novpn" >> /etc/iproute2/rt_tables
Netfilterマスクを処理する既存のIPルールを確認します。
ip rule show | grep fwmark
Grepで何も表示されない場合は、問題ありません。一部の行が出力される場合は、各行のWord fwmark
の右側にある16進数を書き留めてください。現在使用されていない番号を選択する必要があります。既存のfwmarkルールがなかったので、65を選択しました。
ip rule add fwmark 65 table novpn
これにより、netfilterマスク65を持つすべてのパケットは、パケットのルーティング方法について、新しいnovpn
テーブルを検索します。
ip route add default via YOUR.GATEWAY.IP.HERE dev eth0 table novpn
ここで注意すべき重要な点はdev eth0
。これにより、novpn
テーブルを通過するすべてのトラフィックは、VPNが作成する仮想トンネルインターフェイスではなく、ハードウェアイーサネットインターフェイスのみを使用するようになります。
今度は、iprouteキャッシュをフラッシュして、新しいルールとルートがすぐに有効になることを確認する良いタイミングです。
ip route flush cache
iptables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark 65
オプションが多すぎて、詳しく説明できません。 iptablesのマニュアルページを読んで、ここで何が起こっているのかを理解することを強くお勧めします。
man iptables
簡単に言うと、ファイアウォールのマングルテーブル(特殊なパケット処理用)に出力ルールを追加し、指定されたnetfilterマスク65でソースポート22から発信されたすべてのTCPパケットをマークするように指示します。
この時点で、SSHをテストする準備ができているはずです。すべてがうまくいけば、「login as」プロンプトが表示されます。
セキュリティ上の理由から、トンネルインターフェイスからの着信SSH要求をすべてドロップするようにファイアウォールに指示することをお勧めします。
iptables -A INPUT -i tun0 -p tcp -m tcp --dport 22 -j DROP
上記の手順はすべて一時的なものであることに注意してください(ルールテーブルIDの作成を除く)。次にコンピューターを再起動したときに、これらの手順はクリアされます。それらを永続的なものにすることは、私があなたに残した課題です。