パケットソースとして使用されるIPアドレスを取得する必要があります。default
ルート経由で送信。 (編集)私が言及したパスはラベル付きdefault
ですdefault
(ip r
VPN設定でパケットが使用する実際のパスについては最後を参照してください)。
私の最初の考えは、以下を使用してip r
推定することでした。
# ip r
0.0.0.0/1 via 10.0.2.1 dev tun0
default via 10.237.76.1 dev enxb827eb4297a4 src 10.237.77.206 metric 202
10.0.2.0/24 dev tun0 proto kernel scope link src 10.0.2.100
10.81.102.133 via 10.237.76.1 dev enxb827eb4297a4
10.237.76.0/22 dev enxb827eb4297a4 proto kernel scope link src 10.237.77.206 metric 202
128.0.0.0/1 via 10.0.2.1 dev tun0
見やすく、ip r | grep default | cut -d" " -f7
好きな効果も与えます10.237.77.206
。
その後、他のシステム(両方のDebian派生製品)で、私は次のような結果を得ました。
# ip r
0.0.0.0/1 via 10.0.2.1 dev tun0
default via 10.237.76.1 dev eth0 metric 202
10.0.2.0/24 dev tun0 proto kernel scope link src 10.0.2.5
10.81.102.133 via 10.237.76.1 dev eth0
10.237.76.0/22 dev eth0 proto kernel scope link src 10.237.76.56 metric 202
128.0.0.0/1 via 10.0.2.1 dev tun0
10.237.76.1
ここで解決策はそれほど簡単ではありません。デフォルトパスIP()を10.237.76.0/22 dev eth0 proto kernel scope link src 10.237.76.56 metric 202
抽出し、それをsrc
。
出力の最終カットはip
lng側で維持することはできません(出力変更、リリース、バージョン間の出力変更など...)。
そのIPを取得するためのより移植可能な方法はありますか?
「携帯用」とは、次のことを意味します。
- 理想的には、「すべてのLinuxで動作」です。
- 理想的ではありませんが、それでも良い「Debianとその派生製品で動作」
デバイスは独自のVPNにあるため、VPNが動作しているとき(つまり、ほとんどの場合)、パケットが使用している実際のパスを直接分析することはできません。このdefault
ルートは、IP全体を効果的にカバーする2つの異なるルートによってブロックされます。範囲。間違っていたら訂正してください。
ベストアンサー1
Google DNSなど、デフォルトのルートを介して常にアクセスできると思われる任意のアドレスを選択してから、送信元アドレスを印刷できます。それ路線:
ip route get 8.8.8.8 | awk '{ for (nn=1;nn<=NF;nn++) if ($nn~"src") print $(nn+1) }'