리눅스에서 스위치를 만드는 방법

리눅스에서 스위치를 만드는 방법

나는 이것을 가지고있다클리어포그 프로armbian 이미지가 있는 라우터 보드입니다. 내가 하고 싶은 것은 Clearfog Pro를 통해 6개의 raspberryPi를 인터넷에 연결하는 것입니다. 결국 나는 7대의 컴퓨터 모두가 IP 주소를 가지게 하여 모든 사람에게 말할 수 있기를 바랍니다. 인터넷에서 읽은 후 이를 실현하려면 네트워크 브리지를 설정해야 한다는 것을 알았습니다.

처음에 이러한 구성을 시도했습니다.여기. 하지만 그들은 나에게 효과가 없었습니다.

이것은 내 /etc/network/interfaces 파일의 현재 구성입니다.

auto lo br0 eth1 lan1
iface lo inet loopback

iface br0 inet dhcp
  bridge_ports eth0 lan1

이것은 의 출력입니다ip link

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether fe:cc:39:e2:0e:81 brd ff:ff:ff:ff:ff:ff
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP mode DEFAULT group default qlen 532 link/ether 00:50:43:25:fb:84 brd ff:ff:ff:ff:ff:ff
4: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 532 link/ether 00:50:43:84:25:2f brd ff:ff:ff:ff:ff:ff
5: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 532 link/ether 00:50:43:0d:19:18 brd ff:ff:ff:ff:ff:ff
6: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN mode DEFAULT group default qlen 1 link/ipip 0.0.0.0 brd 0.0.0.0
7: lan1@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UP mode DEFAULT group default qlen 1000 link/ether 00:50:43:84:25:2f brd ff:ff:ff:ff:ff:ff
13: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether 00:50:43:25:fb:84 brd ff:ff:ff:ff:ff:ff

그리고ip route

    192.168.178.0/24 dev br0  proto kernel  scope link  src 192.168.178.44 

그래서 SSH를 통해 lan1의 컴퓨터로 연결될 것이라고 생각하려고 했지만 192.168.178.44그렇지 않았습니다. 클리어포그에 다시 연결했어요.

또한 eth1과 eth0을 연결하려고 시도했지만 반환되었습니다.can't add eth1 to bridge br0: Invalid argument

그래서 내 질문은: 올바른 브리지 설정은 무엇입니까?

편집: 요청한 대로 내brctl show

bridge name bridge id       STP enabled interfaces
br0         8000.00504325fb84   no      eth0
                                        lan1

ifconfig

br0    Link encap:Ethernet  HWaddr 00:50:43:25:fb:84  
      inet addr:192.168.178.44  Bcast:192.168.178.255  Mask:255.255.255.0
      inet6 addr: fe80::250:43ff:fe25:fb84/64 Scope:Link
      inet6 addr: 2001:984:6433:1:250:43ff:fe25:fb84/64 Scope:Global
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:572 errors:0 dropped:0 overruns:0 frame:0
      TX packets:86 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:147582 (144.1 KiB)  TX bytes:11762 (11.4 KiB)

 eth0      Link encap:Ethernet  HWaddr 00:50:43:25:fb:84  
      inet addr:192.168.178.44  Bcast:192.168.178.255  Mask:255.255.255.0
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:1225 errors:0 dropped:0 overruns:0 frame:0
      TX packets:118 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:532 
      RX bytes:318910 (311.4 KiB)  TX bytes:15514 (15.1 KiB)
      Interrupt:38 

 eth1      Link encap:Ethernet  HWaddr 00:50:43:84:25:2f  
      UP BROADCAST MULTICAST  MTU:1500  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:532 
      RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
      Interrupt:39 

lan1      Link encap:Ethernet  HWaddr 00:50:43:84:25:2f  
      UP BROADCAST MULTICAST  MTU:1500  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
      inet addr:127.0.0.1  Mask:255.0.0.0
      inet6 addr: ::1/128 Scope:Host
      UP LOOPBACK RUNNING  MTU:65536  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1 
      RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

그리고ip route show

default via 192.168.178.1 dev br0 
192.168.178.0/24 dev br0  proto kernel  scope link  src 192.168.178.44 
192.168.178.0/24 dev eth0  proto kernel  scope link  src 192.168.178.44 

답변1

제가 정확하게 이해하도록 하자면, Clearfrog에도 연결된 스위치에 6개의 RPi가 연결되어 있습니다. RPi가 서로 통신할 수 있을 뿐만 아니라 Clearfrog를 통해 인터넷에 액세스할 수 있기를 원할 뿐입니다. 앞으로는 클리어프로그를 CF라고 부르겠습니다.

이제 귀하의 IP 링크를 살펴 보겠습니다.

1: lo <- loopback
2: bond0 <- special interface for traffic aggregation/bonding
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> <- Assuming this is your uplink
4: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> <- Assuming this is physically connected to your switch
5: eth2: <BROADCAST,MULTICAST>  <- Assuming this is inactive
6: tunl0@NONE: <NOARP> <- Tunnel interface for vpn
7: lan1@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> <- Lan1 isn't physical, it's a VLAN inteface.
13: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> <- bridge interface you created

나에게 확실하지 않은 것은 라우터가 WAN 측에서 공용 IP 주소를 수신하는지 아니면 다른 게이트웨이 뒤에 남아 있는지 여부입니다. 다른 게이트웨이 뒤에 있는 경우 RPi를 별도의 서브넷에 두고 CF에 트래픽을 라우팅하도록 지시해야 합니다.

예를 들면 다음과 같습니다.

*internets*
   ^
|modem| -> |gateway| -> |    switch    |
                        ^    ^    ^    ^         
   192.168.178.0/25     PC1  PC2  PC3  CF           Primary Network
                                       ^
                                  |   switch    |
                                  ^  ^  ^  ^  ^  ^
   192.168.178.128/25             Pi Pi Pi Pi Pi Pi    Pi Network

귀하의 기본 네트워크에 사용 가능한 범위가 .1-.126인 서브넷 192.168.178.0/25를 할당했습니다. Pi 네트워크에 서브넷 192.168.178.128/25를 할당했습니다. 이 네트워크의 사용 가능한 범위는 .129-.254입니다.

이전에 시도했던 작업은 두 어댑터를 연결하는 것이었습니다. Mac 주소가 있는 두 개의 어댑터 뒤에 여러 호스트가 있는 경우 다음을 수행해야 합니다.라우팅, 브리징이 아닙니다.

결국 이것은 라우터 아닌가요? 질문은 "어떻게 스위치를 만드는가" 였는데, 두 네트워크 사이의 트래픽을 제어하기 위해 이 장치를 사용하고 있지 않습니까? 그렇지 않으면 CF를 제거하고 임베디드 Linux가 필요하지 않은 멍청한 스위치를 넣을 수 있습니다.

br0을 제거하려면:

    brctl show | awk '{if(NR>1)print}' | awk '{print $NF}' | while read line ; do brctl delif br0 $line ; done

ifconfig br0 down

brctl delbr br0

다음으로 라우터 작업을 수행하도록 라우터를 준비하겠습니다.

/etc/network/interfaces 편집

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
       address 192.168.178.126
       network 192.168.178.0
       netmask 255.255.255.128
       gateway 192.168.178.1
       broadcast 192.168.178.127

auto eth1
iface eth1 inet static
       address 192.168.178.129
       network 192.168.178.128
       netmask 255.255.255.128
       broadcast 192.168.178.255   

그런 다음 /etc/sysctl.conf를 편집하고 전달을 활성화합니다. 정말 너만필요첫 번째 줄이지만 이것은 내가 일반적으로 라우터에 사용하는 것입니다.

net.ipv4.conf.all.forwading=1
net.ipv4.conf.default.accept_source_route = 1
net.ipv4.tcp_synack_retries = 2
net.ipv4.conf.all.send_redirects = 1                                                                                                                                                                                                         
net.ipv4.conf.default.send_redirects = 1                                                                                                                                                                                                                                                                                                                                                                                                            
net.ipv4.conf.all.accept_source_route = 1                                                                                                                                                                                                                                                                                                                                                                                                     
net.ipv4.conf.all.accept_redirects = 1                                                                                                                                                                                                       
net.ipv4.conf.all.secure_redirects = 1         

그런 다음 다음을 실행하십시오: sysctl -p

이제 경로를 추가하겠습니다. 나는 IP 경로 모두 플러시를 수행할 것을 제안할 것입니다. 그러나 이 작업을 수행하면 SSH와의 연결이 즉시 끊어지기 때문에 콘솔에 있는 것이 좋습니다.

ip route flush all
ip rule flush
ip route add 192.168.178.0/25 via 192.168.178.1 dev eth0
ip route add 192.168.178.128/25 src 192.168.178.129
ip route add default via 192.168.178.1 dev eth0

이제 기본 네트워크 라우터로 이동하여 고정 경로를 추가하려고 합니다: 192.168.178.129를 통해 192.168.178.128/25 이는 내부 네트워크의 호스트가 RPi 네트워크에 연결하려고 할 때 기본 게이트웨이/라우터에 전달하도록 지시합니다. CF(게이트웨이 역할을 함)에 대한 요청이 추가로 라우팅됩니다.

CF로 돌아가서 마지막으로 할 일은 iptables에 전달 규칙을 추가하는 것입니다.

#Allow rpi's to connect to the outside world but not initiate new connections to hosts on your primary network
iptables -I FORWARD -i eth1 -o eth0 -s 192.168.178.128/25 ! -d 192.168.178.0/25  -m conntrack --ctstate NEW -j ACCEPT
# Allow forwarding for established connections
iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Allow hosts on your primary network to initiate new connections to pi's
iptables -I FORWARD -i eth0 -o eth1 -s 192.168.178.0/25 -d 192.168.178.128/25  -m conntrack --ctstate NEW -j ACCEPT

iptables-save > /etc/iptables/rules.v4를 사용하여 이러한 규칙을 저장하고 싶을 것입니다.

이제 Pi에 IP를 할당하려면 CF에 DHCP 서버가 필요하거나 고정 주소를 할당해야 합니다. 두 경우 모두 기본 게이트웨이를 CF의 IP 192.168.178.129로 설정하고 싶을 것입니다.

그게 당신이 필요로하는 전부입니다. 문제가 있는 경우 언제든지 댓글을 남겨주시면 최선을 다해 도와드리겠습니다.

답변2

네트워크/인터페이스 파일에서:

auto lo br0 eth1 lan1
iface lo inet loopback

iface br0 inet dhcp
bridge_ports eth0 lan1

일부 항목을 분리하는 데 도움이 됩니다.

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet manual
auto br0
iface br0 inet static #or dhcp
address <your address>
netmask  255.255.255.0
gateway  <your gateway>
bridge_ports eth1
bridge_stp off
bridge_fd 0

도움이 되었기를 바랍니다

관련 정보