Routing

根據輸出地址埠在不同的 vLAN 上發送數據包

  • November 20, 2019

我有一塊板子發送兩種 UDP 數據包。在同一塊板上,我配置了幾個 vLAN:

sudo modprobe 8021q 
sudo ip link add link enP2p1s0 name enP2p1s0.5 type vlan id 5 
sudo ip link set enP2p1s0.5 up
sudo ip link add link enP2p1s0 name enP2p1s0.8 type vlan id 8 
sudo ip link set enP2p1s0.8 up

我想設置系統,以便如果我將數據包發送到 IP:埠 1,其中埠 1 的值為 X,數據包會在 id 5 的 VLAN 上發出,如果我在 IP:埠 2 上發送數據包,其中IP 是相同的 IP但埠 2 的值為 Y - 數據包在 ID 為 8 的 VLAN 上發出。

這可能嗎?

是的,你可以用 iptables 做到這一點。您可以更改包的源地址 (SNAT),讓路由根據目標埠上的 IP 決定介面。或者您可以根據目標埠設置標記,擁有多個路由表並設置 ip 規則以分配特定的路由表。

我認為這可能有效:

sudo ip link add link enP2p1s0 name enP2p1s0.5 type vlan id 5  
sudo ip link set enP2p1s0.5 up  
sudo ip link add link enP2p1s0 name enP2p1s0.8 type vlan id 8  
sudo ip link set enP2p1s0.8 up  
sudo iptables-legacy -A OUTPUT -p udp --dport 15004 -j MARK --set-mark 1  
sudo iptables-legacy -A OUTPUT -p udp --dport 14002 -j MARK --set-mark 2  
sudo ip rule add fwmark 1 table 11  
sudo ip rule add fwmark 2 table 22  
sudo ip route add 192.168.0.0/24 dev enP2p1s0.5 table 11  
sudo ip route add 192.168.0.0/24 dev enP2p1s0.8 table 22

@EOhm 可以看看嗎?

引用自:https://unix.stackexchange.com/questions/552023