bir fiziksel ağ arabiriminde birden çok MAC adresi (linux)


20

Basit soru: Bir fiziksel ağ arabiriminde (linux) birden çok MAC adresini nasıl ayarlayabilirim?

Niye ya? Benim ISS GW ip <-> mac kontrol ediyor ve benim "linuxbox" üzerinden trafik yönlendirmek ve farklı kaynak ip ile iletmek istiyorum.

İp <-> mac kontrol etmeden, eth0, eth0: 0 kullanacağım, ancak bu durumda her IP için benzersiz MAC adresine ihtiyacım var.

Yanıtlar:


28

Farklı MAC adresleriyle birden çok sanal arabirim oluşturmak için macvlan'ı kullanabilirsiniz.

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

Teoride, ihtiyacınız olan tek şey bu olsa da, bir noktada çekirdekte bir şey kırıldı ve her şey için bir MAC kullanmasına neden olacaktı. Bunun durumunun ne olduğundan emin değilim; umarım sabittir.

Değilse, çıkış arayüzüne dayalı çıkıştaki veya hedef IP'ye dayalı girişteki MAC adreslerini yeniden yazmak için uygun olanları kullanabilirsiniz:

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

Ne yazık ki arptables da benim deneyim oldukça buggy.


1
Nekropost için özür dilerim, ancak "bir noktada çekirdekte bir şey kırıldı ve her şey için bir MAC kullanmasına neden olur" kısmı ile ilgili olarak, bir hata olmayabilir: Çekirdeğin ayarlanabilmesi gerekiyordu "net.ipv4.conf .all.arp_ignore "ifadesini 1 olarak ayarlayın. Diğer ARP ayarlayıcılarına da ihtiyaç duyulabilir; daha fazla açıklama için bunu ve bunu okuyun .
MoonSweep

4

Köprü ve TAP arabiriminizin aynı MAC adresini paylaşmasının nedeni, köprünün bir arabirime bağlanana kadar bir MAC olmamasıdır. BRCTL ile bir köprü oluşturursanız ve bir "brctl şovu" yaparsanız, köprünün boş bağlantı noktaları olduğunu görürsünüz. Göstermek için bir test köprüsü oluşturdum.

# brctl addbr Instagram Hesabındaki Resim ve Videoları testbr0

[root @ stooge vb.] # brctl show testbr0
köprü adı köprü kimliği STP etkin arabirimler
testbr0 8000.000000000000 hayır

Üç test TAPS'i oluşturdum. "Brctl showmacs testbr0" 'dan çıktı.

[root @ stooge vb.] # brctl showmacs testbr0
bağlantı noktası yok mac adresi yerel mi? yaşlanma zamanlayıcısı
  1 86: 51: b6: 95: 0e: b6 evet 0.00
  2 86: 58: 63: c6: d4: e7 evet 0.00
  3 8a: a7: fa: 17: c5: 12 evet 0.00

Gördüğünüz gibi, her köprü bağlantı noktasının benzersiz bir MAC adresi vardır ve köprü ilk arabirimi bağlı olarak MAC'sini göstermelidir. Fiziksel bir ağ arabirimini köprülerseniz, Ethernet köprüsü MAC adresini devralır ve tüm sanal arabirimleri aşağı taşır. Test köprüsüne eth0 bağlanması örneği.

[root @ stooge vb.] # brctl showmacs testbr0
bağlantı noktası yok mac adresi yerel mi? yaşlanma zamanlayıcısı
  4 AA: BB: CC: DD: EE: FF evet 0.00
  1 86: 51: b6: 95: 0e: b6 evet 0.00
  2 86: 58: 63: c6: d4: e7 evet 0.00
  3 8a: a7: fa: 17: c5: 12 evet 0.00

Tekrar "brctl show" kullanarak;

[root @ stooge vb.] # brctl gösterisi
köprü adı köprü kimliği STP etkin arabirimler
testbr0 8000.00aabbccddee hayır eth0
                                                        tap00
                                                        tap01
                                                        tap02 

TAP arayüzleri eth0 hala PORT 4'te olsa bile bir tane aşağı taşındı. Hala benzersiz MAC adresleriniz var. Ethernet köprüsü bir kaynak yolu arabirimine bağlıysa, bir IP adresi veya DHCP kullanma seçeneğiniz yoktur. Değeri ne olursa olsun, bir kaynak-rota arayüzünü köprülerseniz, "yerel olmayan" bir MAC adresi göstereceksiniz. Bu bir sonraki atlama yönlendiricisi MAC adresidir. RedHat'ta, IFCONFIG kullanarak bir kaynak IP belirtmede bir seçenek olduğunu biliyorum. İlk seçeneğim, bir kaynak IP belirtebileceğinizi düşündüğüm için IP komut referansına danışmak olacaktır. Hiç denemedim.


3

tapGerekli MAC adresleri ve IP'leri olan cihazlar veya başka herhangi bir sanal ethernet cihazı oluşturmaya çalışın ve ardından eth0 ile bir köprüye bağlayın.


Bunu zaten denedim ve işe yaramıyor. Br0 (eth0, tap0, tap1) kullanırsam. Ağın çalışması için IP'yi br0 olarak ayarlamam gerekiyor. IP olmadan (ifconfig br0 0.0.0.0 yukarı) ağ çalışmaz. IP'yi br0 ve 0'a ayarladığımda. (win-pc'den) Her iki IP'ye de ping atabilirim ama arp -a'dan sonra her biri aynı MAC'a sahiptir.
grapefruyt

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.