如何為特定的目標 ip 使用特定的介面?
我有兩個介面,一個是來自我的安卓手機的共享網際網路 USB 連接。
enp0s31f6
:乙太網網際網路連接(預設)enp0s20f0u1
: 共享連接安卓我想使用
enp0s20f0u1
介面通過 ssh 訪問只有一個 IP。我的意思是,所有將連接到A.B.C.D
(外部/網際網路 ip)的東西都必須通過這個介面。沒有其他的。我正在使用 Centos 7。
- 如何路由具有
A.B.C.D
目標 IP 的每個數據包以使用enp0s20f0u1
介面?- 我需要使用
ip route
還是iptables
足夠了?為什麼 ?我對“ip routing”很陌生,請用你的答案給我解釋。
細節:
enp0s20f0u1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.42.174 netmask 255.255.255.0 broadcast 192.168.42.255 enp0s31f6: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.128.1.21 netmask 255.255.254.0 broadcast 10.128.1.255
我做了什麼:
$ip 路由:
default via 10.128.0.1 dev enp0s31f6 proto static metric 100 default via 192.168.42.129 dev enp0s20f0u1 proto static metric 101 10.128.0.0/23 dev enp0s31f6 proto kernel scope link src 10.128.1.21 metric 100 10.136.80.66 via 10.128.0.1 dev enp0s31f6 proto dhcp metric 100 192.168.42.0/24 dev enp0s20f0u1 proto kernel scope link src 192.168.42.174 metric 100 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
我介面的 ip 是 192.168.42.174,這個介面的網關是
192.168.42.129
.我刪除了第二行,如下
dirkt
所示:default via 192.168.42.129 dev enp0s20f0u1 proto static metric 101
$ ip路由
default via 10.128.0.1 dev enp0s31f6 proto static metric 100 10.128.0.0/23 dev enp0s31f6 proto kernel scope link src 10.128.1.21 metric 100 10.136.80.66 via 10.128.0.1 dev enp0s31f6 proto dhcp metric 100 A.B.C.D via 192.168.42.129 dev enp0s20f0u1 192.168.42.0/24 dev enp0s20f0u1 proto kernel scope link src 192.168.42.174 metric 100 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
我不想將此介面用於 ABCD 的任何其他內容。我應該刪除
192.168.42.0/24 dev enp0s20f0u1 proto kernel scope link src 192.168.42.174 metric 100
也 ?我想不,看起來它是針對我介面的 LAN 網路的。
我犯了一個錯誤,我使用介面的 ip
via
而不是網關。現在一切都執行良好。更清楚了。
只是為了理解的輔助問題,如果現在我只想重定向埠 22 並阻止其他所有內容。我想我需要 iptables/firewallD,以拒絕所有以 ABCD 作為目標 IP 的內容並只允許埠 22。
路由通過選擇最具體的目的地來工作。這意味著你需要
- 每個介面後面的網段的一條路由
- 一個預設路由(而不是多個)
- ABCD
ssh
目的地的一條特殊路線。所以輸出
ip route
應該是這樣的:default via 10.128.0.1 dev enp0s31f6 proto static metric 100 10.128.0.0/23 dev enp0s31f6 proto kernel scope link src 10.128.1.21 metric 100 192.168.42.0/24 dev enp0s20f0u1 proto kernel scope link src 192.168.42.65 metric 100 A.B.C.D/32 dev enp0s20f0u1 ...
要添加最後一個,請執行
ip route add A.B.C.D/32 dev enp0s20f0u1 via 192.168.42.129
目前網關在哪裡
192.168.42.129
(不必保持不變)。採用
ip route del default via 192.168.42.129 dev enp0s20f0u1
手動刪除第二個預設路由,如果你想確保除了 ABCD 和連結本地數據包之外沒有其他東西通過這個介面。現在配置的方式,如果第一個介面由於某種原因宕掉了,所有的流量都會使用這個介面。
在您的輸出中,您有一個
10.136.80.66
通過 DHCP 添加的。我不知道為什麼要添加它,但很可能基礎設施出於某種原因需要它。有多種方法可以自動執行此設置,這取決於您的系統的配置方式(網路管理器
/etc/network/interfaces
??)按照評論中的建議使用
iptables
標記數據包是一個愚蠢的想法,路由直接工作而無需設置標記。這就是路由的用途。使用
/24
一個答案中建議的網路遮罩而不是/32
網路遮罩A.B.C.D
將路由多個目標地址(實際上是 256 個),因此也不要這樣做。