물리적 어댑터 없이 컴퓨터에서 가상 이더넷 인터페이스를 만드는 방법은 무엇입니까?

물리적 어댑터 없이 컴퓨터에서 가상 이더넷 인터페이스를 만드는 방법은 무엇입니까?

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파이프의 두 끝으로 처리합니다. 전송된 트래픽은 모두 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 주소와 넷마스크를 두 개 더 추가했습니다.

    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.1, 192.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 eth0됩니다 .10.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

모듈 중 하나 dummy가 있는지 살펴보겠습니다.

$ lsmod | grep dummy
dummy                  16384  0

네, 거기 있어요. 좋아요 리눅스 커널 모듈~ 해야 하다위의 명령을 실행하여 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_dummy( addr대신 알림을 받음 address). 아니면 도망갔을 수도 있습니다 sudo ip a change 10.0.0.1 dev eth_dummy( a대신 알림 address). 그게 문제입니다! ?

음, 이 특정 명령에는 사용자가 의미하는 바를 확실히 알 수 있는 충분한 문자만 필요합니다. 다시 말해서,다른 명령을 의미할 수 없다는 것을 알 수 있을 만큼 명령에 충분한 문자가 있으면 해당 명령을 수락합니다.ip문자로 시작하므로 그 a뒤의 다른 하위 명령으로는 ip a충분하지 않습니다. 따라서 다음 명령은 모두 동일합니다.

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

help정보를 공유하고 메뉴와 페이지를 볼 때 이 이상한 점에 유의하십시오 man(아래 참조 참조). 그렇지 않으면 여러분도 저처럼 혼란스러울 것이며, 아무리 열심히 검색하더라도 이 페이지의 어디에서나 나열된 a( 에서와 같이 ip a) 또는 ( 에서와 같이) 명령을 찾을 수 없을 것입니다 addr. ip 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 주소를 변경하는 방법

관련 정보