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. 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
그게 다야!
인터페이스에 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 address
eth_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
인터페이스에서 기존 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
전체 가상 인터페이스 장치를 삭제합니다.
# 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 add
and type 명령 에 대해 자세히 알아보려면 ip address change
다음을 참조하세요.
ip address help
, 또한:- 이 답변은 다음과 같습니다.서버 오류: "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.6
eth0
도 이렇습니다 ip addr add 10.11.12.6/24 dev eth0
.
그래서 당신도 할 수 있습니다다음에 추가ip address change
ip 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
확인한 후에는 이 위치에서 시작하는 다른 매개변수가 없기 때문에 해당 매개변수를 승인할 정도로 똑똑합니다 . 따라서 이것들은 모두 작동합니다.address
ip
a
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
인용하다
- @slm의 답변은 여기에 있습니다
ip help
man ip
ip link help
man ip link
ip address help
man ip address
- 서버 오류: "ip addrchange" 및 "ipaddrreplace" 명령 이해
ip address add
ip address change
- , , , ,ip address replace
의 차이점을 이해하는 데 매우 유용합니다ip address del
.