我对 Linux 网络还很陌生。
我有一台带有两个以太网接口的 Debian PC,一个嵌入在主板上,另一个嵌入在 PCI 卡上。第一个eth0
连接到我的路由器(连接到 Inet)。我想“链接”eth1
到eth0
,以便在插入电缆时访问我的路由器(和 Inet)eth1
。以同样的方式将eth0
电缆连接到我的路由器的以太网端口之一。
Debian PC 还应该能够访问 Inet 和 LAN,因此不只是充当插入的电缆eth0
(来自我的路由器)和插入的电缆eth1
(连接到另一台 PC)之间的“虚拟链路”。
这是可以实现的吗?如何?
答案1
您可以使用桥接口。您可以使用brctl
来自桥接工具创建桥接接口。例如,
$ brctl addbr br0
$ brctl addif br0 eth0 eth1
$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.00004c9f0bd2 no eth0
eth1
因此,在将接口添加到桥接设备后,eth0
您eth1
需要br0
进行以下设置。您可以使用ifconfig
它来查看:
$ ifconfig eth0
eth0 Link encap:Ethernet HWaddr BC:AE:AA:34:22:11
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
...
$ ifconfig eth1
eth1 Link encap:Ethernet HWaddr BC:AE:AA:34:11:22
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
...
以及具有 IP 地址的桥接设备:
$ ifconfig br0
br0 Link encap:Ethernet HWaddr BC:AE:C5:11:22:33
inet addr:192.168.1.20 Bcast:192.168.1.255 Mask:255.255.255.0
...
答案2
几年后..添加另一个答案。
首先,我不确定ifconfig
这几天这个包是否还在维护。最好使用ip
来自的命令ip路由2包裹。
一些指南iproute2
:
http://andys.org.uk/bits/2010/02/24/iproute2-life-after-ifconfig/
https://www.howtoing.com/ifconfig-vs-ip-command-comparing-network-configuration/
https://lartc.org/howto/lartc.iproute2.html#LARTC.IPROUTE2.WHY
其次,在你的情况下我可能会使用简单的Linux桥另外,但是,还值得一提的是,自 2014 年以来开放 vSwitch (OVS)是Linux Bridge的有力竞争者。
一些参考:
http://www.fiber-optic-transceiver-module.com/ovs-vs-linux-bridge-who-is-the-winner.html
https://devinpractice.com/2016/10/18/open-vswitch-introduction-part-1/
https://kumul.us/switches-ovs-vs-linux-bridge-simplicity-rules/
编辑:我将展示如何使用桥连接两个 Linux 命名空间。
解决方案 #1- 使用Linux桥(注意 - 所有ip
命令都有一个顶部带有 3# 的注释):
# Variables
BRIDGE=my-bridge
TAP1=Tap1
TAP1-BR=TAP1-bridge-side
TAP2=Tap2
TAP2-BR=TAP2-bridge-side
NAMESPACE1=Namespace1
NAMESPACE2=Namespace2
## Create bridge
brctl addbr $BRIDGE
### Bring it up
ip link set dev $BRIDGE up
### Create a Veth pair named Tap1 <--> TAP1-bridge-side
ip link add $TAP1 type veth peer name $TAP1-BR
## Attach one side of Tap1 to bridge
brctl addif $BRIDGE $TAP1-BR
### And the other side to namespace1
ip link set $TAP1 netns $NAMESPACE1
### Set the interface on the bridge side up
ip link set dev $TAP1-BR up
### Set the interface inside the namespace up - notice that we execute 'ip netns exec' in order to run the inside the namespace scope
ip netns exec $NAMESPACE1 ip link set dev $TAP1 up
####
# Now create another Veth and connect it to the bridge - just change $TAP1 ->$TAP2, $TAP1-BR -> $TAP2-BR and repeat the same steps..
## Now you can reach namespace1 from namespace2 and vice versa.
解决方案#2.A- 使用配置桥打开交换机:
# Install the package
sudo apt-get install openvswitch-switch
# Now run the exact same commands like before just replace the CLI tool:
## brctl -> ovs-vsctl
# And replace commands:
## addbr -> add-br
## addif -> add-port
解决方案#2.B- 使用配置桥打开交换机- 用内部端口替换 Veth 对:
# Similar to # 2.A
ovs-vsctl add-br $BRIDGE
# Similar to 2.A - Just with the addition of -- set Interface...
ovs-vsctl add-port $BRIDGE $TAP1 -- set Interface $TAP1 type=internal
### Similar #2.A (and #1)
ip link set $TAP1 netns $NAMESPACE1
### Similar #2.A (and #1)
ip netns exec $NAMESPACE1 ip link set dev $TAP1 up
# Now repeat for $TAP2...