私は優れた技術を使用しています。シェルスクリプトから外部IPアドレスを取得するにはどうすればよいですか?私のパブリックIPアドレスを探す:
dig +short myip.opendns.com @resolver1.opendns.com
また、SSHトンネルのプロキシとしてsshuttleを使用します。次のコマンドを使用して、すべてのポートとIPでトラフィック転送(DNS要求を含む)を開始します。
sshuttle --dns -vr usr@sshserver 0/0
エージェントの起動後に訪問します。https://canihazip.com/s私の外部IPが変更されていることを確認してください。はい。ただし、digコマンドを再実行すると、エージェントが起動する前に報告したのと同じ外部IPが報告されます。
詳細な出力では、sshuttleは他のdigコマンドを渡して確認するようです。https://dnsleaktest.com予想どおり、プロキシの反対側のIPのみが表示されます。私が知っている限り、sshuttleはうまくいくようです。
digコマンドがプロキシの前に私の外部IPを報告する理由を説明できる人はいますか?私の目標は、opendnsサーバーが要求が私のSSHサーバーで発生したと思うようにすることです。
これは想像を少し超えていますが、Wiresharkを少し見てみると、DNSトラフィックをフィルタリングするとき、Wiresharkは上記のDIGコマンド以外にはDNS要求を表示しません。コマンドがプロキシをバイパスしています。
外部IPを見つけるために他の(あまりエレガントな)方法を使用することをお勧めしますが、これにより次の質問が発生します。 sshuttleを迂回するために他の方法がありますか?
答え1
Shuttleコマンドを実行するときにデバッグメッセージを表示するオプションを使用したので、-v
シャトルがいくつかのiptablesルールを生成したことを確認できます。ルールの1つは次のとおりです。
iptables -t nat -A sshuttle-12300 -j REDIRECT --dest <nameserver>/32 -p udp --dport 53 --to-ports 12299
上記のルールは、Shuttleプロキシポートに送信された<nameserver>
DNS要求をリダイレクトします。 Shuttleはファイル<nameserver>
からそれを見つけ、それに基づいてiptablesルールを自動的に生成します。/etc/resolv.conf
したがって、digコマンドが/etc/resolv.conf
ファイルで定義されているネームサーバーを使用してDNSクエリを実行すると、sshuttleにプロキシされますが、そうでない場合はプロキシされません。
resolver1.opendns.com
あなたの場合、その住所は208.67.222.222
あなたの住所で定義されていないため、/etc/resolv.conf
sshuttleによってプロキシされません。
答え2
ゲートウェイには2つの外部IPアドレスがあります。ゲートウェイで実行されるNATは、一種のロードバランシングを使用します。これは、宛先 IP またはプロトコルタイプに基づいて行うことができます。この場合、DNSクエリとHTTPパケットの送信元IPアドレスが異なります。