Điểm:2

Làm cách nào để bật Chế độ lăng nhăng vĩnh viễn trên NIC do NetworkManager quản lý?

lá cờ th

Tôi đang cố gắng kết nối hai trong số một số NIC để hoạt động giống như một trung tâm chuyển mạch.
Để làm như vậy, cần kích hoạt chế độ hỗn tạp trên các NIC.
Ngay cả khi tôi đặt thành promisc onâ bằng lệnh âip linkâ, thì cài đặt này sẽ được đặt lại khi tôi khởi động lại PC.

Làm cách nào tôi có thể bật Chế độ lăng nhăng vĩnh viễn, ngay cả khi tôi khởi động lại PC?

Môi trường là Ubuntu Desktop 20.04 LTS.
Vì lý do này, cấu hình mạng dựa trên NetworkManager.

Một ví dụ về cấu hình tối thiểu được hiển thị bên dưới:

Vagrant.configure("2") do |config|
  config.vm.define :bridge do |machine|
    machine.vm.box = "bento/ubuntu-20.04"
    machine.vm.network : private_network, auto_config: false, virtualbox__intnet: "intnet_a"
    machine.vm.network : private_network, auto_config: false, virtualbox__intnet: "intnet_b"

    machine.vm.provision "shell", nội tuyến: <<-SHELL
      cập nhật apt-get
      apt-get install -y quản lý mạng
      con mèo > /etc/netplan/50-bridge.yaml <<'EOS'
mạng:
  phiên bản: 2
  ethernet:
    eth1:
      địa chỉ:
        - 0.0.0.0/32
    eth2:
      địa chỉ:
        - 0.0.0.0/32
  cầu:
    anh 0:
      giao diện:
        - eth1
        - eth2
EOS
      tiếng vang 'mạng: { phiên bản: 2, trình kết xuất: Trình quản lý mạng}' > /etc/netplan/99-NetworkManager.yaml
      áp dụng kế hoạch mạng
    VỎ BỌC
  chấm dứt
chấm dứt

Lệnh "ip link" kích hoạt trạng thái PROMISC của NIC, như hình bên dưới.

$ sudo ip link set dev eth1 promisc on
$ sudo ip link set dev eth2 promisc on
địa chỉ $ ip
[…]
3: eth1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 trạng thái UP nhóm mặc định qlen 1000
    liên kết/ether xx:xx:xx:xx:c4:f5 brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 trạng thái UP nhóm mặc định qlen 1000
    liên kết/ether xx:xx:xx:xx:48:57 brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 trạng thái qdisc noqueue UP nhóm mặc định qlen 1000
    liên kết/ether xx:xx:xx:xx:c4:f5 brd ff:ff:ff:ff:ff:ff
[…]

Tuy nhiên, sau khi khởi động lại HĐH, trạng thái PROMISC sẽ được đặt lại.

khởi động lại $ sudo
[…]
địa chỉ $ ip
[…]
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 trạng thái UP nhóm mặc định qlen 1000
    liên kết/ether xx:xx:xx:xx:c4:f5 brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 trạng thái UP nhóm mặc định qlen 1000
    liên kết/ether xx:xx:xx:xx:48:57 brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 trạng thái qdisc noqueue UP nhóm mặc định qlen 1000
    liên kết/ether xx:xx:xx:xx:c4:f5 brd ff:ff:ff:ff:ff:ff
[…]

Trong ví dụ này, tôi đã sử dụng Vagrant với mục đích hiển thị môi trường có thể tái tạo.
Vagrant không phải là một yêu cầu, thứ tôi thực sự muốn sử dụng là Ubuntu trên PC vật lý.
Chỉ cần bật Chế độ hỗn hợp thông qua chạy cung cấp Vagrant không làm giải quyết vấn đề.

Điểm:0
lá cờ th

Tôi đã tìm thấy một số phương pháp và tự giải quyết.

Cách 1: Sử dụng NetworkManager-dispatcher

$ sudo bash -c 'cat > /etc/NetworkManager/dispatcher.d/50-promisc' <<'EOS'
#!/usr/bin/bash -e
trường hợp "$2" trong
    hướng lên)
        nếu [[ "$1" = "eth1" ]] || [[ "$1" = "eth2" ]]; sau đó
            đặt liên kết ip dev $1 promisc trên
        fi
        ;;
esac
EOS
$ Sudo chmod u=rwx,g=rx,o=rx /etc/NetworkManager/dispatcher.d/50-promisc
khởi động lại $ sudo
[…]
địa chỉ $ ip
[…]
3: eth1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 trạng thái UP nhóm mặc định qlen 1000
    liên kết/ether xx:xx:xx:xx:c4:f5 brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 trạng thái UP nhóm mặc định qlen 1000
    liên kết/ether xx:xx:xx:xx:48:57 brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 trạng thái qdisc noqueue UP nhóm mặc định qlen 1000
    liên kết/ether xx:xx:xx:xx:c4:f5 brd ff:ff:ff:ff:ff:ff
[…]

Đăng ký một kịch bản cho NetworkManager-dispatcher điều đó sẽ kích hoạt promisc khi NIC mục tiêu (eth1 hoặc eth2) ở trạng thái hoạt động.

Phương pháp 2: Đăng ký dịch vụ một lần trong systemd bị trì hoãn cho đến khi đơn vị network-online.target khởi động

$ Sudo bash -c 'cat > /etc/systemd/system/bridge-promisc.service' <<'EOS'
[Đơn vị]
Mô tả=Làm cho các giao diện chạy ở chế độ hỗn tạp khi khởi động
Sau=mạng-online.đích

[Dịch vụ]
Loại=oneshot
ExecStart=/usr/sbin/ip link set dev eth1 promisc on
ExecStart=/usr/sbin/ip link set dev eth2 promisc on
Thời gian chờBắt đầuSec=0
RemainafterExit=có

[Cài đặt]
WantedBy=default.target
EOS
$ Sudo systemctl kích hoạt cầu nối
khởi động lại $ sudo
[…]
địa chỉ $ ip
[…]
3: eth1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 trạng thái UP nhóm mặc định qlen 1000
    liên kết/ether xx:xx:xx:xx:c4:f5 brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 trạng thái UP nhóm mặc định qlen 1000
    liên kết/ether xx:xx:xx:xx:48:57 brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 trạng thái qdisc noqueue UP nhóm mặc định qlen 1000
    liên kết/ether xx:xx:xx:xx:c4:f5 brd ff:ff:ff:ff:ff:ff
[…]

Tôi nghĩ rằng phương pháp này có thể được áp dụng cho các mẫu không sử dụng Trình quản lý mạng.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.