
背景:
我從執行 OpenWRT 的住宅路由器後面的命令列透過 openvpn 用戶端 (v2.4.4) 連接到伺服器。
最近,我在系統日誌中看到以下內容:
Aug 8 17:16:28 Deluxe kernel: [12972.603549] IPv4: martian source 192.168.1.100 from 34.210.182.212, on dev eno1
Aug 8 17:16:28 Deluxe kernel: [12972.603572] ll header: 00000000: d0 17 c2 ac 64 4b c4 e9 84 48 79 32 08 00 ....dK...Hy2..
Aug 8 17:16:28 Deluxe kernel: [12972.910801] IPv4: martian source 192.168.1.100 from 34.210.182.212, on dev eno1
Aug 8 17:16:28 Deluxe kernel: [12972.910822] ll header: 00000000: d0 17 c2 ac 64 4b c4 e9 84 48 79 32 08 00 ....dK...Hy2..
Aug 8 17:16:28 Deluxe kernel: [12973.230932] IPv4: martian source 192.168.1.100 from 34.210.182.212, on dev eno1
Aug 8 17:16:28 Deluxe kernel: [12973.230953] ll header: 00000000: d0 17 c2 ac 64 4b c4 e9 84 48 79 32 08 00 ....dK...Hy2..
該行中的第一個 MAC 位址ll header
是我的網路卡,第二個是路由器上的乙太網路介面。
連接之前我的路由表如下:
[2020-08-08 ☱ 18:35 ☴]$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eno1
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eno1
連接後不久,它看起來像這樣:
[2020-08-08 ☱ 18:35 ☴]$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.25.40.1 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eno1
10.25.40.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
128.0.0.0 10.25.40.1 128.0.0.0 UG 0 0 0 tun0
185.228.19.148 192.168.1.1 255.255.255.255 UGH 0 0 0 eno1
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eno1
倒數第二個主機 IP 是 VPN 閘道。適配器tun0
的配置如下:inet 10.25.40.244 netmask 255.255.255.0 destination 10.25.40.244
三到五分鐘後,火星交通將會減弱並且很少出現。
我已經測試過在openvpn
沒有路由器的情況下透過連接(直接連接到我的數據機),並且發生了同樣的情況。
我在這裡有點冒險,但看起來,當路由發生突然變化(如用戶啟動的 VPN 連接時發生)時,已建立的/相關的連接會持續存在並被視為無效而被丟棄。隨著時間的推移,這些連結就會消失。
問題:
- 我對火星資料包產生原因的理解正確嗎?
- 如果我想避免丟失這些資料包,我該怎麼做?例如,我可以使用
nat
或mangle
表iptables
將這些資料包定向到tun
介面嗎?
答案1
- 你的理解是正確的。
- 就我而言,我只是停止記錄此類資料包。即使這是一次攻擊,它也不會起作用,因為路由會阻止它成功:
net.ipv4.conf.all.log_martians = 0