beberapa alamat MAC pada satu antarmuka jaringan fisik (linux)

20

Pertanyaan sederhana: Bagaimana saya bisa mengatur beberapa alamat MAC pada satu antarmuka jaringan fisik (linux)?

Mengapa? ISP saya memeriksa ip <-> mac di GW dan saya ingin merutekan lalu lintas melalui "linuxbox" saya dan kemudian meneruskannya dengan ip sumber yang berbeda.

Tanpa memeriksa ip <-> mac, saya akan menggunakan eth0, eth0: 0, tetapi dalam situasi ini saya memerlukan alamat MAC unik untuk setiap IP.

grapefruyt
sumber

Jawaban:

28

Anda dapat menggunakan macvlan untuk membuat beberapa antarmuka virtual dengan alamat MAC yang berbeda.

ip link add link eth0 address 00:11:11:11:11:11 eth0.1 type macvlan
ip link add link eth0 address 00:22:22:22:22:22 eth0.2 type macvlan

Secara teori itu harus menjadi semua yang Anda butuhkan, meskipun pada titik tertentu ada yang rusak di kernel dan itu akan menyebabkannya menggunakan satu MAC untuk semuanya. Saya tidak yakin apa statusnya; semoga sudah diperbaiki.

Jika tidak, Anda bisa menggunakan arptables untuk menulis ulang alamat MAC pada output berdasarkan pada antarmuka egress atau pada input berdasarkan pada IP tujuan:

arptables -A OUT -o eth0.1 --arhln 06 -j mangle --mangle-hw-s 00:11:11:11:11:11
arptables -A OUT -o eth0.2 --arhln 06 -j mangle --mangle-hw-s 00:22:22:22:22:22
arptables -A IN -d 192.168.1.1 --arhln 06 -j mangle --mangle-hw-d 00:11:11:11:11:11
arptables -A IN -d 192.168.1.2 --arhln 06 -j mangle --mangle-hw-d 00:22:22:22:22:22

Sayangnya arptables juga cukup bermasalah dalam pengalaman saya.

pemakan
sumber
1
Maaf untuk necropost, tetapi mengenai bagian "pada suatu titik ada sesuatu yang rusak di kernel dan itu akan menyebabkannya menggunakan satu MAC untuk semuanya", itu mungkin bukan bug: Saya harus mengatur kernel yang bisa diubah "net.ipv4.conf .all.arp_ignore "to 1 agar ini berfungsi dengan benar. Tunable ARP lain mungkin diperlukan juga; untuk penjelasan lebih lanjut, baca ini dan ini .
MoonSweep
4

Alasan mengapa jembatan dan antarmuka TAP Anda berbagi alamat MAC yang sama, adalah karena jembatan tidak memiliki MAC, sampai terikat ke antarmuka. Jika Anda membuat jembatan dengan BRCTL, dan melakukan "brctl show", Anda akan menemukan jembatan memiliki port kosong. (Tidak ada antarmuka terikat padanya). Dalam mengikat TAP0 ke br0, secara alami, itu akan ditampilkan sebagai MAC yang sama. Saya membuat jembatan uji, untuk menggambarkan.

# brctl addbr testbr0

[root @ stooge dll] # brctl tampilkan testbr0
jembatan nama jembatan id antarmuka yang diaktifkan STP
testbr0 8000.000000000000 no

Saya membuat tiga TAPS uji. Output dari "brctl showmacs testbr0".

[root @ stooge dll] # brctl showmacs testbr0
port no addr mac adalah lokal? timer penuaan
  1 86: 51: b6: 95: 0e: b6 ya 0,00
  2 86: 58: 63: c6: d4: e7 ya 0,00
  3 8a: a7: fa: 17: c5: 12 ya 0,00

Seperti yang Anda lihat, masing-masing port bridge memiliki alamat MAC yang unik, dan bridge harus memperlihatkan MAC-nya, sebagai antarmuka pertama yang diikat. Jika Anda menjembatani antarmuka jaringan fisik, jembatan Ethernet akan mewarisi alamat MAC-nya, dan memindahkan semua antarmuka virtual ke bawah. Contoh mengikat eth0, ke jembatan uji.

[root @ stooge dll] # brctl showmacs testbr0
port no addr mac adalah lokal? timer penuaan
  4 AA: BB: CC: DD: EE: FF ya 0.00
  1 86: 51: b6: 95: 0e: b6 ya 0,00
  2 86: 58: 63: c6: d4: e7 ya 0,00
  3 8a: a7: fa: 17: c5: 12 ya 0,00

Menggunakan "brctl show" lagi;

[root @ stooge dll] # brctl tampilkan
jembatan nama jembatan id antarmuka yang diaktifkan STP
testbr0 8000.00aabbccddee no eth0
                                                        ketuk00
                                                        ketuk01
                                                        ketuk02 

antarmuka TAP telah bergerak turun satu, meskipun eth0, masih di PORT 4. Anda masih memiliki alamat MAC yang unik. Jika jembatan Ethernet terikat ke antarmuka sumber-rute, Anda tidak punya pilihan dalam menggunakan alamat IP, atau DHCP. Untuk apa nilainya, jika Anda menjembatani antarmuka sumber-rute, Anda akan menunjukkan alamat MAC "non-lokal". Ini adalah alamat MAC router hop berikutnya. Saya tahu di RedHat, ada opsi dalam menentukan IP sumber, menggunakan IFCONFIG. Opsi pertama saya, akan berkonsultasi dengan referensi perintah IP, karena saya pikir Anda dapat menentukan IP sumber. Saya belum pernah mencobanya.

Lars Bailey
sumber
3

Cobalah untuk membuat tapperangkat atau perangkat ethernet virtual lainnya dengan alamat MAC dan IP yang diperlukan dan kemudian pasang ke satu jembatan dengan eth0.

gelraen
sumber
Saya sudah mencobanya dan tidak berhasil. Jika saya menggunakan br0 (eth0, ketuk0, ketuk1). Saya harus mengatur IP pada br0 agar jaringan berfungsi. Tanpa IP (ifconfig br0 0.0.0.0 ke atas) jaringan tidak berfungsi. Jadi ketika saya mengatur IP pada br0 dan tap0. (dari win-pc) Saya bisa melakukan ping kedua IP tetapi setelah arp-masing-masing memiliki MAC yang sama.
grapefruyt
0

Sepertinya Anda mungkin dapat menggunakan vconfig untuk membuat beberapa alamat vlan pada ethernet fisik yang sama, masing-masing dengan alamat mac yang berbeda.

Phil Hollenback
sumber
Lalu lintas dari semua IP harus
dibatalkan