Linuxサーバーがあり、1つのコマンドラインでメインのIPv6アドレスを検索したいと考えています。
これまでの私のコマンド:
$ ip addr show dev eth0 | sed -e's/^.*inet6 \([^ ]*\)\/.*$/\1/;t;d'
それは示しています:
2001:410:0:39:221:28ff:fe46:eef4
fe80::221:28ff:fe46:eef4
しかし、出力が次のようになるように1回のみが必要です。
2001:410:0:39:221:28ff:fe46:eef4
ip -6 addr
iPv6アドレスが表示されます。
/sbin/ip -6 addr | grep inet6 | awk -F '[ \t]+|/' '{print $3}' | grep -v ^::1 | grep -v ^fe80
/sbin/ip -6 addr | grep inet6
の出力は次のようになります。
inet6 ::1/128 scope Host
inet6 2001:123:456:55f::1/64 scope global
inet6 fe80::62eb:69ff:fed2:d2a6/64 scope link
awk -F '[ \t]+|/' '{print $3}'
は、各行設定区切り文字を1つ以上の空白またはフォワードスラッシュに分割します。必要なのは3ドルです。
grep -v ^::1 | grep -v ^fe80
::1
またはfe80
で始まる行を除外します。
$ /sbin/ifconfig | grep inet6
inet6 addr: fe80::2ff:19ff:fe60:1a00/64 Scope:Link
inet6 addr: fe80::211:22ff:fe33:4455/64 Scope:Link
inet6 addr: ::1/128 Scope:Host
1つのIPv6アドレスをランダムに選択したい場合
$ /sbin/ifconfig | grep inet6 | head -n 1
inet6 addr: fe80::2ff:19ff:fe60:1a00/64 Scope:Link
最初のイーサネットアダプターの最も一般的な名前のIPv6アドレスが必要な場合
$ /sbin/ifconfig eth0 | grep inet6
inet6 addr: fe80::2ff:19ff:fe60:1a00/64 Scope:Link
あなただけのアドレスが必要な場合
$ /sbin/ifconfig eth0 | awk '/inet6/{print $3}'
fe80::2ff:19ff:fe60:1a00/64
LinuxでIPアドレスを表示するには、次のコマンドを使用します。
ifconfig
通常、IPv6アドレスは2001:5c0:9168::/48
のようになります。 IPの競合が発生している場合は、次の手順に従ってIPアドレスを再度設定してください。
次に、次のコマンドを使用して新しいIPを追加します。
ip -f inet6 addr add 2001:5c0:9168::2/64 dev eth0
その後、デフォルトのIPを追加します
ip -f inet6 ro add default via 2001:5c0:9168::1 dev eth0
インストールが完了したら、Apache、SSHなどのIPv6対応サービスを再構成/再起動するだけです。
いくつかの小さな調整で、あなたの最初の試みはうまくいったでしょう:
ip -o -6 addr show eth0 | sed -e 's/^.*inet6 \([^ ]\+\).*/\1/'
大きな変更点は、-o
フラグが追加され、エントリが1行に1つずつ出力されるようになりました。これにより、sedを簡単に実行できます。
まず、IPv6では、どのマシンにも複数のIPv6アドレスがあり、それらが別々のネットワーク上にあり、到達したい場所に応じてそれらのいずれかが使用される可能性があることを覚えておく必要があります。
したがって、送信元IPアドレスが何かという質問に答える前に、トラフィックの送信先を決定する必要があります。次に、その宛先にトラフィックを送信するときに、どのIPv6アドレスがソースになるかをLinuxに要求するだけです。
「インターネット」に送信する場合は、ランダムなグローバルIPv6アドレスをランダムに選択します。 GoogleのパブリックDNSアドレス。
ip r get to 2001:4860:4860::8888 | Perl -ne '/src ([\w:]+)/ && print "$1\n"'
2001:db8:f387:c818:5:2:0:1000
これは、その宛先へのルートをLinuxに要求します。 Perlはsrc
を探して結果を解析し、次のフィールドを出力します。
別の宛先を指定すると、別の送信元アドレスを受け取る可能性があります。
ip r get to ::1 | Perl -ne '/src ([\w:]+)/ && print "$1\n"'
::1
ip addr show dev eth0 | sed -e's/^.*inet6 \(2001[^ ]*\)\/64 scope global dynamic.*$/\1/;t;d'