Ubuntu
ip addr add dev tun1 local 192.168.69.0 remote 192.168.69.1 是什麼意思?
我找到了以下一組命令,可以在 linux 上打開一個 tun 設備,將事物中繼到網際網路。但是,數據包不會中繼回 tun 設備
ip tuntap add dev tun1 mode tun user `id -un` ip link set dev tun1 up ip addr add dev tun1 local 192.168.69.0 remote 192.168.69.1 iptables -t filter -I FORWARD -i tun1 -o eth0 -j ACCEPT iptables -t filter -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
是什麼
ip addr add dev tun1 local 192.168.69.0 remote 192.168.69.1
意思?什麼是local
和remote
?可能缺少什麼?我的客戶端發送一個 SYN,伺服器用 SYN+ACK 響應,但是這個 SYN+ACK 沒有中繼回 tun 設備。
簡單來說,您可以區分兩種類型的連結(這是簡化,但對於這個問題來說已經足夠了):
- 點對點連結,其中連結的每一端都是一個對等點。每個對等點都知道在鏈路後面只有一個對等點,其他所有人都被路由。範例是串列鏈路(通過 PSTN 調製解調器)
- 多路訪問鏈路,鏈路後面可能有多個其他對等方。有很多範例,例如乙太網、WiFi 和一些過時的範例
當您通過“地址和網路遮罩”的(通常)形式為介面配置地址時
ip address add x.y.z.t/n dev eth
,您基本上執行以下操作:
- 告訴核心它應該將 a 辨識
x.y.z.t
為它自己的地址,因此它將範圍本地路由添加到local
路由表中- 告訴核心像
x.y.z.00...0
÷這樣的地址x.y.z.11...1
可以在連結後面直接訪問,因此它通過此介面將範圍連結路由添加到main
路由表中(/n
實際上指定了該網路上所有主機共有多少位地址)- 告訴核心 xyz11…1 是連結的“廣播”地址,因此它會在
local
表中添加廣播路由(除了“節點個人”地址之外,還會考慮發往該地址的數據包x.y.z.t
)但是點對點連結背後沒有“網路”,沒有人可以廣播,可能只有一個其他對等點。當您將地址添加到表單中的連結時
ip address add local x.y.z.t remote b.c.d.e dev tun
,您基本上執行以下操作:
- 告訴核心它應該將 a 辨識
x.y.z.t
為自己的地址,因此它將範圍本地路由添加到local
路由表中- 告訴核心該地址
b.c.d.e
可以通過該連結直接訪問,因此它通過該介面向main
路由表添加到該地址的路由。例如,該命令
ip address add local 10.0.1.0 remote 10.0.1.1 dev tun0
僅創建以下路由:
local 10.0.1.0 dev tun0 proto kernel scope host src 10.0.1.0
(在local
表中)10.0.1.1 dev tun0 proto kernel scope link src 10.0.1.0
(在main
表中)在這兩種情況下,在發出“ip address add”命令之前和之後檢查路由表。
請注意,您可以將點對點樣式配置添加到多路訪問介面,反之亦然;您甚至可以添加單個“/32”地址,然後手動“通過介面”添加路由,這將與您在命令中設置有意義的網路遮罩或遠端地址完全一樣。您甚至可以將多種類型的配置添加到單個界面,並且它們都可以同時工作!所以不要把所有這些參數都看得太認真,把它們當成配置地址時自動添加必要路由的方式。