仮想インターフェイスとさまざまなIP

仮想インターフェイスとさまざまなIP

私はコマンドを使用してwlan0に仮想インターフェイスを作成し、ifconfigこれが私が持っているものです:

wlan0     Link encap:Ethernet  IndirizzoHW c4:46:19:69:b7:a5  
          indirizzo inet:192.168.1.4  Bcast:192.168.1.255  Maschera:255.255.255.0
          indirizzo inet6: fe80::c646:19ff:fe69:b7a5/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:277003 errors:0 dropped:2 overruns:0 frame:0
          TX packets:121609 errors:0 dropped:0 overruns:0 carrier:0
          collisioni:0 txqueuelen:1000 
          Byte RX:329915637 (329.9 MB)  Byte TX:17663121 (17.6 MB)

wlan0:1   Link encap:Ethernet  IndirizzoHW c4:46:19:69:b7:a5  
          indirizzo inet:172.16.1.4  Bcast:172.16.255.255  Maschera:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

私のローカルネットワークの2台目のコンピュータで同じことをしましたが、ping 172.16.1.7すべてがうまくいきました。

しかし、2つのIPがあるので、1つの理解はできません。どのIPを選択してICMP要求を送信する必要がありますか?オリジナルですか192.168.1.4、それとも私が作ったのですか172.16.1.4

答え1

カーネルのルーティングポリシールールによって決定されます。次のコマンドを実行すると、カーネルが何を使用しているかを確認できます。

$ ip route get 172.16.1.7
172.16.1.7 dev wlan0 src 172.16.1.4

ip route showip roルートテーブル(そのルートのトラフィックに使用する送信元アドレスも表示)を使用するか、単に表示できます。

withを使用するpingときに-I使用するインターフェースを指定できます。

ping -I 172.16.1.4 172.16.1.7

答え2

「仮想インターフェイス」(wlan0:1など)は、複数のIPv4アドレスがネットワークインターフェイスに関連付けられていることをカーネルに通知する古い方法に過ぎません。最新のカーネルでは、これらのインタフェースは実際には存在せず、代わりにip addr

$ sudo ifconfig veth0b:1 add 10.0.0.2
$ sudo ifconfig
veth0b: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 10.0.0.1  netmask 255.255.255.0  broadcast 0.0.0.0
    inet6 fe80::801e:15ff:fe73:e98a  prefixlen 64  scopeid 0x20<link>
    ether 82:1e:15:73:e9:8a  txqueuelen 1000  (Ethernet)
    RX packets 58  bytes 7700 (7.5 KiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 15  bytes 1174 (1.1 KiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth0b:1:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 10.0.0.2  netmask 0.0.0.0  broadcast 0.0.0.0
    ether 82:1e:15:73:e9:8a  txqueuelen 1000  (Ethernet)

$ ip addr show dev veth0b
2: veth0b@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
     link/ether 82:1e:15:73:e9:8a brd ff:ff:ff:ff:ff:ff link-netnsid 0
  inet 10.0.0.1/24 scope global veth0b
     valid_lft forever preferred_lft forever
  inet 10.0.0.2/0 scope global veth0b:1:0
     valid_lft forever preferred_lft forever
  inet6 fe80::801e:15ff:fe73:e98a/64 scope link 
     valid_lft forever preferred_lft forever

特に、「仮想インターフェイス」をバインドするインターフェイスとして選択することはできません。

$ ping -I veth0b:1 10.0.0.254
ping: invalid source address veth0b:1

ただし、pingの送信元IPアドレスを選択できます(同じ内容です)。

$ ping -I 10.0.0.1 10.0.0.254
$ ping -I 10.0.0.2 10.0.0.254

これは実際にルーティングやゲートウェイとは関係ありません。ルーティングは宛先アドレスによって決定されます。ただ、ポリシールーティングが適用されない限り、どちらの場合も、アプリケーションがインターフェイスにバインドすることを選択するか、特定のソースアドレスを選択した後に発生します。

答え3

pingにはデフォルトのインターフェイスがあるので、次のことを行う必要があります。

ping -I wlan0:1 your_target

関連情報