“ip adresi değiştirme” ve “ip adresi değiştirme” komutlarını anlama


10

Şu anda eth0 arayüzü ile ilişkili aşağıdaki IPv4 adresleri var :

T60:~ # ip -V
ip utility, iproute2-ss110629
T60:~ # ip addr show dev eth0
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 00:15:58:2a:84:3e brd ff:ff:ff:ff:ff:ff
    inet 10.11.12.2/24 scope global eth0
    inet 10.11.12.3/24 scope global secondary eth0
    inet 10.11.12.4/24 scope global secondary eth0
    inet6 fe80::215:58ff:fe2a:843e/64 scope link 
       valid_lft forever preferred_lft forever
T60:~ # 

10.11.12.3/24 adresini 10.11.12.6/24 olarak değiştirmek veya değiştirmek istiyorum. Bu nasıl yapılır? Eğer yürütürsem ip addr change 10.11.12.6/24 dev eth0veya ip addr replace 10.11.12.6/24 dev eth010.11.12.6 sadece eth0'a eklenirse. Ayrıca, değiştirme / değiştirme durumunda sözdizimi olmamalı change/replace from 10.11.12.3/24 to 10.11.12.6/24mı? ip addr delKomutu kullanabileceğimi biliyorum , ama bunu ip addr changeveya ile nasıl başarabilirim ip addr replace?

Yanıtlar:


19

(Bu eski bir soru olduğunun farkındayım ama Google I dışarı tam olarak ne anlamaya çalışıyordu çünkü beni buraya getiren changeve replaceyapmak ve farklı nasıl).

Hem inanıyoruz replaceve changemevcut bir adresi değiştirmek için kullanılır. Düşünmek:

ip addr add 192.168.1.10/32 dev dummy0

Bu beni:

32: dummy0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default 
    link/ether 5a:ec:58:4f:d1:35 brd ff:ff:ff:ff:ff:ff
    inet 192.168.111.10/32 scope global dummy0
       valid_lft forever preferred_lft forever
    inet6 fe80::58ec:58ff:fe4f:d135/64 scope link 
       valid_lft forever preferred_lft forever

Aynı komutu tekrar çalıştırırsam bir hata alırım:

# ip addr add 192.168.111.10/32 dev dummy0 
RTNETLINK answers: File exists

Bu adresteki bayrakları değiştirmek istersem, ya changeda öğelerini kullanabilirim replace. Burada, bu adresteki ve ayarlarını ip addr changedeğiştirmek için kullanıyorum :preferred_lftvalid_lft

# ip addr change 192.168.111.10/32 dev dummy0  preferred_lft 300 valid_lft 300
# ip addr show dummy0
32: dummy0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default 
    link/ether 5a:ec:58:4f:d1:35 brd ff:ff:ff:ff:ff:ff
    inet 192.168.111.10/32 scope global dynamic dummy0
       valid_lft 298sec preferred_lft 298sec
    inet6 fe80::58ec:58ff:fe4f:d135/64 scope link 
       valid_lft forever preferred_lft forever

Davranışı ip addr replaceaynıdır. Aslında, koda bakarsanız, neredeyse aynı eylemlerle sonuçlanırlar:

    if (matches(*argv, "change") == 0 ||
            strcmp(*argv, "chg") == 0)
            return ipaddr_modify(RTM_NEWADDR, NLM_F_REPLACE, argc-1, argv+1);
    if (matches(*argv, "replace") == 0)
            return ipaddr_modify(RTM_NEWADDR, NLM_F_CREATE|NLM_F_REPLACE, argc-1, argv+1);

Buradaki niyet change, yalnızca mevcut bir adresi replacedeğiştirirken mevcut bir adresi değiştirecek veya belirtilen adres mevcut değilse yeni bir adres oluşturacak gibi görünüyor . Uygulamada, her ikisi gibi görünüyor changeve replacezaten yoksa adresi ekleyecek.

Aslında yeni bir adres eklemek ve eski bir adresi kaldırmak istiyorsanız, bunu iki adımda ve ip addr delardından ip addr add(veya elbette başka bir şekilde) kullanarak yapmanız gerekir .


Bu cevap için teşekkürler. Üretim ortamımı bir ton kapalı kalma süresinden kurtardı (eğer daha önce NO P0
bulsaydım
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.