sự hiểu biết của ip ip addr thay đổi


10

Hiện tại tôi có các địa chỉ IPv4 được liên kết với giao diện eth0 :

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:~ # 

Tôi muốn thay thế hoặc thay đổi địa chỉ 10.11.12.3/24 thành 10.11.12.6/24. làm như thế nào? Nếu tôi thực thi ip addr change 10.11.12.6/24 dev eth0hoặc ip addr replace 10.11.12.6/24 dev eth0sau đó 10.11.12.6 chỉ được thêm vào eth0. Ngoài ra, trong trường hợp thay đổi / thay thế, không nên dùng cú pháp change/replace from 10.11.12.3/24 to 10.11.12.6/24? Tôi biết rằng tôi có thể sử dụng ip addr dellệnh, nhưng làm thế nào để đạt được điều này với ip addr changehoặc ip addr replace?

Câu trả lời:


19

(Tôi nhận ra đây là một câu hỏi cũ, nhưng Google đã đưa tôi đến đây vì tôi đang cố gắng tìm ra chính xác những gì changereplacelàm và chúng khác nhau như thế nào).

Tôi tin rằng cả hai replacechangeđược sử dụng để sửa đổi một địa chỉ hiện có. Xem xét:

ip addr add 192.168.1.10/32 dev dummy0

Điều này giúp tôi:

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

Nếu tôi chạy lại cùng một lệnh, tôi gặp lỗi:

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

Nếu tôi muốn sửa đổi các cờ trên địa chỉ đó, tôi có thể sử dụng changehoặc replace. Ở đây, tôi sử dụng ip addr changeđể sửa đổi preferred_lftvalid_lftcài đặt trên địa chỉ đó:

# 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

Hành vi của ip addr replacelà giống hệt nhau. Trong thực tế, nếu bạn nhìn vào mã, chúng sẽ dẫn đến các hành động gần như giống hệt nhau:

    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);

Có vẻ như ý định ở đây là changesẽ chỉ sửa đổi một địa chỉ hiện có, trong khi replacesẽ sửa đổi một địa chỉ hiện có hoặc tạo một địa chỉ mới nếu địa chỉ được chỉ định không tồn tại. Trong thực tế, có vẻ như cả hai changereplacesẽ thêm địa chỉ nếu nó chưa tồn tại.

Nếu bạn thực sự muốn thêm một địa chỉ mới và xóa một địa chỉ cũ, bạn sẽ cần phải làm điều đó theo hai bước, sử dụng ip addr deltheo sau ip addr add(hoặc cách khác, tất nhiên).


Cảm ơn bạn cho câu trả lời này. Nó đã cứu môi trường sản xuất của tôi rất nhiều thời gian chết (nếu tôi đã tìm thấy nó sớm hơn, tôi có thể có NO P0s :()
Samveen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.