Routing
根據輸出地址埠在不同的 vLAN 上發送數據包
我有一塊板子發送兩種 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 可以看看嗎?