物理アダプタなしでコンピュータに仮想イーサネットインターフェイスを作成するには?

物理アダプタなしでコンピュータに仮想イーサネットインターフェイスを作成するには?

WiFiネットワークカードはありますが、物理イーサネットネットワークカード(wlan0はありますがeth0はありません)を持たないDell XPS 13ウルトラブックがあります。 NFSでVagrantを使用するには、仮想アダプタを作成する必要があり、一般的なアダプタがifup eth0:1...失敗することがわかりましたignoring unknown interface eth0:1=eth0:1。仮想インターフェイスも作成しましたが、wlan0同じ結果が得られました。

物理インターフェイスなしでマシンに仮想インターフェイスを作成するには?

答え1

仮想インターフェイスの設定

ネットワークインターフェイスを作成したいが、物理ネットワークカードのサポートがない場合は、仮想リンクタイプを使用できます。これについての詳細はこちらでご覧いただけます。iproute2 ウィキペディアページ

eth10の作成

このインターフェイスを作成する前に、仮想カーネルモジュールがロードされていることを確認する必要があります。次のことができます。

$ sudo lsmod | grep dummy
$ sudo modprobe dummy
$ sudo lsmod | grep dummy
dummy                  12960  0 

これでドライバがロードされたので、必要な仮想ネットワークインターフェイスを作成できます。

$ sudo ip link add eth10 type dummy

メモ:以前のバージョンではip上記のように行いましたが、その過程で状況が変わったようです。参考のためだけにここに保管しましたが、コメントのフィードバックに基づいて上記の内容が機能します。

$ sudo ip link set name eth10 dev dummy0

そして確認してください:

$ ip link show eth10
6: eth10: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default 
    link/ether c6:ad:af:42:80:45 brd ff:ff:ff:ff:ff:ff

MACアドレスの変更

必要に応じてMACアドレスを変更できます。

$ sudo ifconfig eth10 hw ether 00:22:22:ff:ff:ff
$ ip link show eth10
6: eth10: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default 
    link/ether 00:22:22:ff:ff:ff brd ff:ff:ff:ff:ff:ff

エイリアスの作成

その後、eth10の上にエイリアスを作成できます。

$ sudo ip addr add 192.168.100.199/24 brd + dev eth10 label eth10:0

次のように確認してください。

$ ifconfig -a eth10
eth10: flags=130<BROADCAST,NOARP>  mtu 1500
        ether 00:22:22:ff:ff:ff  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

$ ifconfig -a eth10:0
eth10:0: flags=130<BROADCAST,NOARP>  mtu 1500
        inet 192.168.100.199  netmask 255.255.255.0  broadcast 192.168.100.255
        ether 00:22:22:ff:ff:ff  txqueuelen 0  (Ethernet)

または以下を使用してくださいip

$ ip a | grep -w inet
    inet 127.0.0.1/8 scope host lo
    inet 192.168.1.20/24 brd 192.168.1.255 scope global wlp3s0
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
    inet 192.168.100.199/24 brd 192.168.100.255 scope global eth10:0

すべて削除しますか?

これらすべてのブロックを解除するには、次のコマンドを実行します。

$ sudo ip addr del 192.168.100.199/24 brd + dev eth10 label eth10:0
$ sudo ip link delete eth10 type dummy
$ sudo rmmod dummy

引用する

答え2

次のコマンドを使用して仮想インターフェイスを作成できます。IP ルート 2ツールキット。

ip link add veth0 type veth peer name veth1

これにより、2つのインタフェースが作成され、veth0それをveth1パイプの2つの端として扱います。送信されたトラフィックはすべてveth0出てveth1、その逆も同様です。

トラフィックをルーティングするには、次の手順を実行できます。

sysctl -w net.ipv4.conf.veth0.forwarding=1

これは、カーネルにveth0(従ってveth1使用されるエンドポイントに対して)着信トラフィックを転送するように指示します。

veth0別のオプションは、他のインターフェイスのブリッジを設定することです。仮想インターフェイスを通過するすべてのトラフィックは、まるでコンピュータがスイッチとして機能するかのようにネットワークにルーティングされます。

このトラフィックで行うことができる他のタスク(仮面舞踏会、リダイレクト、DNATなど)がたくさんありますが、実行したいタスクによって異なります。

解体してください:

ip link del veth0

答え3

Linuxへの仮想(仮想)インターフェースデバイスの追加

...そして、コマンドの紹介ip addressとIPアドレスとネットマスクの追加と削除について説明します。

Ubuntu 18.04と22.04でテストされました。

クイックサマリー

簡潔なバージョン:

# create a virtual `eth_dummy` interface
sudo ip link add eth_dummy type dummy
# Add some required IPs and netmasks to it
sudo ip address add 10.0.0.1/24 dev eth_dummy
sudo ip address add 192.168.2.1/24 dev eth_dummy
sudo ip address add 200.201.202.203/24 dev eth_dummy
# view it
ip a  
# delete it when all done using the interface and running your tests
sudo ip link delete eth_dummy

もう少し詳細なバージョンは次のとおりです。

# See all network interface devices and their IPs and netmasks
ip address
ip a  # Or (same thing) short version

# Create a virtual (dummy) interface named `eth_dummy`.
sudo ip link add eth_dummy type dummy
# see that it exists now
ip a

# Give it 3 IP addresses with netmask `/24` (255.255.255.0)
sudo ip address add 10.0.0.1/24 dev eth_dummy
sudo ip address add 192.168.2.1/24 dev eth_dummy
sudo ip address add 200.201.202.203/24 dev eth_dummy
# See that it has these 3 IP addresses with netmask `/24` now
ip a

# Delete `200.201.202.203/24` on the `eth_dummy` virtual (dummy) interface
sudo ip address del 200.201.202.203/24 dev eth_dummy
# See that the above IP is gone now
ip a 

# Delete the whole `eth_dummy` interface
sudo ip link delete eth_dummy
# See that it is gone now
ip a

詳細

1. 基本知識

  1. 仮想(仮想)アダプタ/インタフェースデバイスの作成

    # 1. Install the "dummy" socket interface Linux kernel module.
    sudo modprobe dummy
    
    # 2. Ensure the "dummy" Linux kernel module is installed.
    sudo lsmod | grep dummy
    
    # 3. View all existing socket interfaces/adapters, whether WiFi, Ethernet,
    # or virtual (dummy)
    ip address
    ip a  # or (short version of the command above)
    
    # 4. Create a virtual (dummy) interface named `eth_dummy`.
    sudo ip link add eth_dummy type dummy
    
    # 5. View it. You'll now see "eth_dummy" as one of your attached interfaces.
    ip address
    
    # 6. Add an IP address and netmask to this new dummy interface. Use any IP
    # address and netmask you like. Ex: `10.0.0.1/24` in this case. 
    # - Note that the `/24` means that the first (most-significant, or
    #   left-most) 24 bits of the 32-bit netmask will be set to 1's. This
    #   (`/24`) is the same as `255.255.255.0`. See below for details and a
    #   full list of possible netmasks.
    # - See `ip address help` for command syntax help. 
    sudo ip address add 10.0.0.1/24 dev eth_dummy
    
    # 7. See the newly-created device and the IP address you just
    # assigned to it.
    ip address
    

    それだけです!

  2. インターフェイスにIPアドレスを追加します。

    ネットワークインターフェイスにIPアドレスを任意の数だけ追加できます。

    ソケットを使用して複数の異なるIPアドレスを同時に受信(バインドおよび受信)する場合は、そのアドレスをすべてこの仮想インターフェイスに簡単に追加できます。

    ここに適切と思われるIPアドレスとネットマスクを2つ追加しました。

    sudo ip address add 192.168.2.1/24 dev eth_dummy
    sudo ip address add 10.5.4.1/8 dev eth_dummy
    

    ip addresseth_dummy私のvirtual()インターフェースの次の内容が表示されますtype dummy。したがって、C、C++、PythonなどのソケットをこのインタフェースのIPアドレス、、、および10.0.0.1192.168.2.1バインドできます。10.5.4.1これは、実際のネットワークスイッチをコンピュータに接続せずにネットワークをテストし、発信パケットをシミュレートする必要がある場合の飛行機旅行に適しています。 (私はこの記事を書いている間飛行機にいます。確かにこれは私を「マイルの高さ」に置きます。」コーディングクラブ)。

    10: eth_dummy: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
        link/ether 4a:e7:bc:8f:2e:2d brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.1/24 scope global eth_dummy
           valid_lft forever preferred_lft forever
        inet 192.168.2.1/24 scope global eth_dummy
           valid_lft forever preferred_lft forever
        inet 10.5.4.1/8 scope global eth_dummy
           valid_lft forever preferred_lft forever
    
  3. インターフェイスから既存のIPアドレスを削除または更新します。

    インターフェイスの既存のIPアドレスを変更するには、そのアドレスを削除して再度追加する必要があります。コマンドはip address changeまったく異なる問題です。既存のIPアドレスのフラグ/設定パラメータを変更します。。したがって、次のようにインターフェイスから IP アドレスを削除して再度追加します。

    # general form
    sudo ip address del <current_ip_address> dev <interface_device_name>
    sudo ip address add <new_ip_address> dev <interface_device_name>
    
    # Example: change `10.5.4.1/8` above to `32.42.52.62/28`
    sudo ip address del 10.5.4.1/8 dev eth_dummy
    sudo ip address add 32.42.52.62/28 dev eth_dummy
    
    # verify the change
    ip address
    
  4. 仮想インターフェイスデバイス全体を削除します。

    # 1. Delete this `eth_dummy` dummy device you created.
    sudo ip link delete eth_dummy
    
    # 2. Ensure 'eth_dummy' is deleted and doesn't show up here now.
    ip address
    

完璧!

ip address addand type コマンドの詳細については、ip address change次を参照してください。

  1. ip address help、また:
  2. この答えは次のとおりです。サーバーエラー:「ip addrchange」および「ipaddrreplace」コマンドの理解

2. 非標準フォーム

私は観察した、@MartinがServerFaultでやったように、それ:

私はそうするか、またはip addr change 10.11.12.6/24 dev eth0に追加しますip addr replace 10.11.12.6/24 dev eth010.11.12.6eth0

もそうですip addr add 10.11.12.6/24 dev eth0

だからあなたもできます次へ追加ip address changeip address replaceインターフェイスに新しいIPアドレスを使用するか、代わりに追加してくださいip address add。しかし、これをしないでください。本当に混乱しています。このaddコマンドの目的は次へ追加新しいIPアドレス、changeこのコマンドの目的は次のとおりです。変化既存のIPアドレスの設定フラグです。実際にもchangeそうです。いいえIP アドレス自体を更新または変更します。これを行うには、まずdel既存のIPアドレスを削除してから、add新しいIPアドレスを追加します。実際にそれが何のreplaceために使われるのか、何と関連があるのか​​知っている人は誰もいないようですchange。ソースコードは私が考える答えを提供します。

技術的には、すべて同じことを行います。

# add IP address 10.11.12.6/24
sudo ip address add 10.11.12.6/24 dev eth_dummy     # standard way to add this IP (recommended)
sudo ip address change 10.11.12.6/24 dev eth_dummy  # non-standard way to add this IP
sudo ip address replace 10.11.12.6/24 dev eth_dummy # non-standard way to add this IP

コマンドの末尾にIPアドレスを入れることもできますが、これも非標準形式です。ip address helpディスプレイIP(例IFADDR:「インターフェースアドレス」)の発売予定今後この言葉dev。したがって、以下は代替形式です。

sudo ip address add 10.11.12.6/24 dev eth_dummy     # standard way to add this IP (recommended)
sudo ip address add dev eth_dummy 10.11.12.6/24     # non-standard way to add this IP

そして単語全体を入力する必要もありませんaddress。このコマンドは、特定のパラメーターipを確認した後にこの場所から始まる他のパラメーターがないため、そのパラメーターを受け入れるのに十分スマートです。したがって、これらはすべて機能します。addressipa

sudo ip address add 10.11.12.6/24 dev eth_dummy  # standard form
# "short", non-standard forms:
sudo ip addres add 10.11.12.6/24 dev eth_dummy
sudo ip addre add 10.11.12.6/24 dev eth_dummy
sudo ip addr add 10.11.12.6/24 dev eth_dummy
sudo ip add add 10.11.12.6/24 dev eth_dummy  # yeah that's confusing: `add add...`
sudo ip ad add 10.11.12.6/24 dev eth_dummy
sudo ip a add 10.11.12.6/24 dev eth_dummy

/number最後に、ネットワークマスクを指定する最後の部分を忘れないでください。以下を考慮してください。

# This:
sudo ip address add 10.11.12.6 dev eth_dummy
# Defaults to this, which isn't very useful
sudo ip address add 10.11.12.6/32 dev eth_dummy

# So, remember to specify your own useful netmask, such as 
# `/24` (255.255.255.0), instead, like this:
sudo ip address add 10.11.12.6/24 dev eth_dummy

3. ネットマスク

以下は、IPアドレスとネットワークマスクがに設定されている場合の可能なネットワークマスクの完全なリストip/netmaskです10.0.0.1/24。これが意味するのは、32ビットネットマスクの最初の(最も重要な、または最も左の)24ビットがs/24に設定されていることです。1ネットマスクは/24と同じです255.255.255.0

可能なネットマスクの完全なリストは次のとおりです。

フルバイトネットマスク:

/32 = 255.255.255.255
/24 = 255.255.255.0     # <== most common
/16 = 255.255.0.0
/8  = 255.0.0.0
/0  = 0.0.0.0           # (I don't even know if this is a valid option)

すべてのネットマスク:

/32 = 255.255.255.255
/31 = 255.255.255.254
/30 = 255.255.255.252
/29 = 255.255.255.248
/28 = 255.255.255.240
/27 = 255.255.255.224
/26 = 255.255.255.192
/25 = 255.255.255.128
/24 = 255.255.255.0     # <== most common
/23 = 255.255.254.0
/22 = 255.255.252.0
/21 = 255.255.248.0
/20 = 255.255.240.0
/19 = 255.255.224.0
/18 = 255.255.192.0
/17 = 255.255.128.0
/16 = 255.255.0.0
/15 = 255.254.0.0
/14 = 255.252.0.0
/13 = 255.248.0.0
/12 = 255.240.0.0
/11 = 255.224.0.0
/10 = 255.192.0.0
/9 = 255.128.0.0
/8 = 255.0.0.0
/7 = 254.0.0.0
/6 = 252.0.0.0
/5 = 248.0.0.0
/4 = 240.0.0.0
/3 = 224.0.0.0
/2 = 192.0.0.0
/1 = 128.0.0.0
/0 = 0.0.0.0            # (I don't even know if this is a valid option)

4. 詳細

lsmod「Linuxカーネルのモジュールステータス」を表示します(参考資料を参照man lsmod)。試してみてください!ただ入力してください

lsmod

モジュールの1つdummyがあるかどうかを見てみましょう。

$ lsmod | grep dummy
dummy                  16384  0

はい、そこにいます。いいね Linux カーネルモジュール〜しなければならない上記のコマンドを実行して、sudo ip link add eth_dummy type dummyカーネルモジュールを使用して仮想インターフェイスを作成できますdummy。ない場合は参照してください@slmの答え

新しい仮想インターフェイスを作成する前に、次のコマンドを実行して既存のIPアドレスとインターフェイスを確認してください。

ip address

以下を見ることもできます。

ifconfig

新しい仮想インターフェイスが作成されると、上記のコマンドのip address出力に表示されます。注:ifconfig作成した仮想仮想デバイスは表示されない場合がありますが、表示されますip address


ちょっと待ってください。しかし、私の同僚は代わりsudo ip addr change 10.0.0.1 dev eth_dummyに実行しましたsudo ip address change 10.0.0.1 dev eth_dummyaddr代わりに通知を受け取りましたaddress)。または逃げた可能性がありますsudo ip a change 10.0.0.1 dev eth_dummya代わりに通知address)。それが問題です! ?

さて、この特定のコマンドには、ユーザーが何を意味するのかを確実に知るのに十分な文字しか必要ありません。つまり、他のコマンドを意味できないことがわかるほど、コマンドに十分な文字がある場合は、そのコマンドを受け入れます。ip文字で始まるので、それa以降の他のサブコマンドではip a十分ではありません。したがって、次のコマンドはすべて同じです。

ip address
ip addres
ip addre
ip addr
ip add
ip ad
ip a

help情報を共有してメニューとページを表示するときは、この奇妙な点に注意してくださいman(下記参照)。そうでなければ、あなたは私と同じように混乱しているかもしれませんが、どんなに一生懸命検索しても、このページのどこにもリストされているa(のようなip a)または(のような)コマンドが見つかりませんaddrip addr両方の略語であることだけを知っておいてくださいaddress。あ…今まさにそこヘルプページから!

$ ip help
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
       ip [ -force ] -batch filename
where  OBJECT := { link | address | addrlabel | route | rule | neigh | ntable |
                   tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm |
                   netns | l2tp | fou | macsec | tcp_metrics | token | netconf | ila |
                   vrf | sr }
       OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
                    -h[uman-readable] | -iec |
                    -f[amily] { inet | inet6 | ipx | dnet | mpls | bridge | link } |
                    -4 | -6 | -I | -D | -B | -0 |
                    -l[oops] { maximum-addr-flush-attempts } | -br[ief] |
                    -o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] |
                    -rc[vbuf] [size] | -n[etns] name | -a[ll] | -c[olor]}
                    ```

And you can run `ip address help` (or `man ip address`), _to see the existence of the `ip address add` and `ip address change` commands!_:
```bash
$ ip address help
Usage: ip address {add|change|replace} IFADDR dev IFNAME [ LIFETIME ]
                                                      [ CONFFLAG-LIST ]
       ip address del IFADDR dev IFNAME [mngtmpaddr]
       ip address {save|flush} [ dev IFNAME ] [ scope SCOPE-ID ]
                            [ to PREFIX ] [ FLAG-LIST ] [ label LABEL ] [up]
       ip address [ show [ dev IFNAME ] [ scope SCOPE-ID ] [ master DEVICE ]
                         [ type TYPE ] [ to PREFIX ] [ FLAG-LIST ]
                         [ label LABEL ] [up] [ vrf NAME ] ]
       ip address {showdump|restore}
IFADDR := PREFIX | ADDR peer PREFIX
          [ broadcast ADDR ] [ anycast ADDR ]
          [ label IFNAME ] [ scope SCOPE-ID ]
SCOPE-ID := [ host | link | global | NUMBER ]
FLAG-LIST := [ FLAG-LIST ] FLAG
FLAG  := [ permanent | dynamic | secondary | primary |
           [-]tentative | [-]deprecated | [-]dadfailed | temporary |
           CONFFLAG-LIST ]
CONFFLAG-LIST := [ CONFFLAG-LIST ] CONFFLAG
CONFFLAG  := [ home | nodad | mngtmpaddr | noprefixroute | autojoin ]
LIFETIME := [ valid_lft LFT ] [ preferred_lft LFT ]
LFT := forever | SECONDS
TYPE := { vlan | veth | vcan | vxcan | dummy | ifb | macvlan | macvtap |
          bridge | bond | ipoib | ip6tnl | ipip | sit | vxlan | lowpan |
          gre | gretap | erspan | ip6gre | ip6gretap | ip6erspan | vti |
          nlmon | can | bond_slave | ipvlan | geneve | bridge_slave |
          hsr | macsec

引用する

  1. @slmの答えはここにあります
  2. ip help
  3. man ip
  4. ip link help
  5. man ip link
  6. ip address help
  7. man ip address
  8. サーバーエラー:「ip addrchange」および「ipaddrreplace」コマンドの理解ip address addip address change- 、、、、、ip address replaceの違いを理解するのに非常に便利ですip address del

また、見ることができます

  1. [私の答え]AskUbuntu:ネットワーク(イーサネットまたはWi-Fi)デバイスをランダムに有効/無効にする方法
  2. LinuxHandbook.com: LinuxでIPアドレスを変更する方法

関連情報