Linux Netfilter 鉤子點位置導致一些奇怪問題:本機發出封包無法使用基於 mark 的策略路由,因 mark 通常在 Netfilter 中設定,但路由處理在 OUTPUT 鉤子點之前,順序倒置。解決辦法是在路由前打 mark。外部進入封包在 PREROUTING 打 mark 故策略路由生效;本機發出封包路由前只能在 socket 層處理。傳輸層較雜、多協議直接走 IP 層(如 OSPF)、TCP connect 時需查路由決定源 IP,故不宜在傳輸層處理。
所幸 Linux socket 支援 SO_MARK 選項,使用便利:
mark = 100; setsockopt(client_socket, SOL_SOCKET, SO_MARK, &mark, sizeof(mark));
雖 raw 表是封包經過第一個表,使用 SO_MARK 仍可在整個 raw 表生效前打 mark,使特定 socket 發出封包全部 NOTRACK:
iptables -t raw -A OUTPUT -m mark --mark 100 -j NOTRACK
否則需在 OUTPUT 鉤子點用大量規則匹配再打 mark,再 NOTRACK。PREROUTING raw 表同理。OUTPUT 屬應用層可控範圍,PREROUTING 以下屬核心與驅動世界,太雜不便操作。
SO_MARK 最大受益者是策略路由。若有路由規則:
ip rule add fwmark 100 table abc ip route add 1.2.3.4/32 via 192.168.0.254 table abc ip route del 1.2.3.4/32 table main
不設 SO_MARK 時,訪問 1.2.3.4 流量因查路由時無 mark 而被丟棄。應用程式加入 SO_MARK 後,查路由時已帶 mark,即可正常訪問。
Win10 Mobile Edge 瀏覽器將支援背景下載功能 開發團隊籌備中 首發版可能不含
Win8 RP 釋出兩個月後進入 RTM,預計 10 月正式上市趕聖誕檔期
Win10 Build 14372 發布:Edge 新增 Evernote Web Clipper 擴充功能
Windows 10 Build 9901 新發現:「Slow Ring」Build 9918 即將到來
Windows 10 Build 9926:提供回饋的管道與方式
Windows 10 允許用戶選擇資源管理器預設開啟檢視:這台電腦或快速存取
微軟中國官方旗艦店「618 年中大促」:Surface RT/Pro、Lumia WP8、鍵盤滑鼠、Office 365/2013 全線降價