我目前的網關結構是:
本機 → ROS 網關, 然後根據數據包的類型來決定要不要路由到OpenWrt的機器上。
Openwrt主要是作用就是梯子,機器的網絡由singbox的TUN全局接管。
一般只有dns請求,以及非國內IP還有FakeIP會被路由到Wrt上。
其他IP 一律直連。
一晚上還是沒弄好,明天再檢查。
昨天升級固件之後了之後發現梯子網絡出現了故障,經過我一番檢修,具體情況:
- 節點測速正常
- 國內網絡訪問正常
- 國外網絡訪問出現斷斷續續的問題,有時能打開有時打不開
- IPv6以及IPv4連接正常
- TG之類的IP直連不需要DNS解析的軟件不受影響
又經過我一番檢修(一晚上+一上午+一下午),大概確認了問題:
- 目標地址為IPv6的DNS請求無法被正確劫持到Wrt上
- 局域網內機器關閉IPv6之後就能正常訪問國內外網
很神奇,我的配置從來沒變過,也就是說這個問題一直存在,IPv6的DNS請求就從來沒正確被劫持過。
以前的固件預計是按照默認DNS請求方式使用IPv4作為主要網絡層協議。現在升級固件之後突然變成IPv6了。
我的ROS並不是通過防火牆NAT來劫持DNS的,而是通過防火牆標記+策略路由的方式來進行DNS劫持。
不過看起來我的IPv6策略路由沒有排上用場,IPv4倒是可以正常工作。
查了很多IPv6和ROS的資料,還是不清楚為什麼策略路由不生效。
沒辦法了,目前只能把IPv6的DNS請求直接在ROS上丟棄掉,這樣客戶端就會嘗試使用IPv4,難受啊。
今天解決了IPv6的路由問題:
原因是我在IPv6和v4上用的是同一個路由表名,之後把名字換了就好了。
但是這很奇怪,因為IPv6和v4的Routing是完全分開的,雖然表名相同,但是內部指向的路由規則卻完全不同。
我只能將這個理解為ROS的獨特設計…
過了幾個星期,IPv6的轉發情況還是不太穩定,有時能用,有時不能用.