Ubuntu

ip addr add dev tun1 local 192.168.69.0 remote 192.168.69.1 是什麼意思?

  • June 21, 2021

我找到了以下一組命令,可以在 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意思?什麼是localremote?可能缺少什麼?

我的客戶端發送一個 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”地址,然後手動“通過介面”添加路由,這將與您在命令中設置有意義的網路遮罩或遠端地址完全一樣。您甚至可以將多種類型的配置添加到單個界面,並且它們都可以同時工作!所以不要把所有這些參數都看得太認真,把它們當成配置地址時自動添加必要路由的方式。

引用自:https://serverfault.com/questions/1067288