软件功能基本开发完成,内测BUG等待修复
This commit is contained in:
@@ -9,7 +9,7 @@ on:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: docker.gitea.com/runner-images:ubuntu-22.04
|
||||
runs-on: ubuntu-22.04
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
|
||||
207
cmd/api/main.go
207
cmd/api/main.go
@@ -1,207 +0,0 @@
|
||||
//go:build ignore
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"strings"
|
||||
"xboard-go/internal/config"
|
||||
"xboard-go/internal/database"
|
||||
"xboard-go/internal/handler"
|
||||
"xboard-go/internal/middleware"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Initialize configuration
|
||||
config.LoadConfig()
|
||||
|
||||
// Initialize database
|
||||
database.InitDB()
|
||||
|
||||
// Initialize Gin router
|
||||
r := gin.Default()
|
||||
|
||||
// Short-link Subscription (Root level)
|
||||
r.GET("/s/:token", handler.Subscribe)
|
||||
|
||||
// Static Assets for Admin Dist
|
||||
r.Static("/admin-assets", "./frontend/admin")
|
||||
|
||||
// Global Middleware
|
||||
r.Use(gin.Recovery())
|
||||
|
||||
// API Groups
|
||||
v1 := r.Group("/api/v1")
|
||||
{
|
||||
// Passport (Auth)
|
||||
passport := v1.Group("/passport")
|
||||
{
|
||||
passport.POST("/login", handler.Login)
|
||||
passport.POST("/register", handler.Register)
|
||||
}
|
||||
|
||||
// Authenticated Routes
|
||||
auth := v1.Group("")
|
||||
auth.Use(middleware.Auth())
|
||||
{
|
||||
user := auth.Group("/user")
|
||||
{
|
||||
user.GET("/info", handler.UserInfo)
|
||||
}
|
||||
}
|
||||
|
||||
// Node (UniProxy) Routes
|
||||
server := v1.Group("/server")
|
||||
server.Use(middleware.NodeAuth())
|
||||
{
|
||||
uniProxy := server.Group("/uniProxy")
|
||||
{
|
||||
uniProxy.GET("/user", handler.NodeUser)
|
||||
uniProxy.POST("/push", handler.NodePush)
|
||||
}
|
||||
}
|
||||
|
||||
// Admin Portal Entry (Direct)
|
||||
v1.GET("/:path", handler.AdminAppPage)
|
||||
}
|
||||
|
||||
// V2 Admin API Group (Matches Xboard official frontend expectations)
|
||||
v2 := r.Group("/api/v2")
|
||||
{
|
||||
// V2 User Auth Routes (used by the admin React app to verify login state)
|
||||
v2user := v2.Group("/user")
|
||||
v2user.Use(middleware.Auth())
|
||||
{
|
||||
v2user.GET("/info", handler.UserInfo)
|
||||
v2user.GET("/checkLogin", handler.UserCheckLogin)
|
||||
}
|
||||
|
||||
// All admin endpoints are prefixed with the secure path
|
||||
admin := v2.Group("/:path")
|
||||
admin.Use(middleware.AdminAuth())
|
||||
{
|
||||
// Config
|
||||
configGrp := admin.Group("/config")
|
||||
{
|
||||
configGrp.GET("/fetch", handler.AdminConfigFetch)
|
||||
configGrp.POST("/save", handler.AdminConfigSave)
|
||||
configGrp.GET("/getEmailTemplate", handler.AdminGetEmailTemplate)
|
||||
configGrp.GET("/getThemeTemplate", handler.AdminGetThemeTemplate)
|
||||
}
|
||||
|
||||
// Dashboard / Stat
|
||||
statGrp := admin.Group("/stat")
|
||||
{
|
||||
statGrp.GET("/getStats", handler.AdminDashboardSummary)
|
||||
statGrp.GET("/getOverride", handler.AdminDashboardSummary)
|
||||
statGrp.GET("/getTrafficRank", handler.AdminGetTrafficRank)
|
||||
statGrp.GET("/getOrder", handler.AdminGetOrderStats)
|
||||
statGrp.POST("/getStatUser", handler.AdminGetStatUser)
|
||||
}
|
||||
|
||||
// System
|
||||
systemGrp := admin.Group("/system")
|
||||
{
|
||||
systemGrp.GET("/getSystemStatus", handler.AdminSystemStatus)
|
||||
systemGrp.GET("/getQueueStats", handler.AdminSystemQueueStats)
|
||||
systemGrp.GET("/getQueueWorkload", handler.AdminSystemQueueStats)
|
||||
systemGrp.GET("/getQueueMasters", handler.AdminSystemQueueStats)
|
||||
systemGrp.GET("/getHorizonFailedJobs", handler.AdminSystemQueueStats)
|
||||
}
|
||||
|
||||
// Essential Resources
|
||||
admin.POST("/plan/fetch", handler.AdminPlansFetch) // Shifted to POST in manifest? Actually manifest says GET next to plan, let's keep GET and add POST if needed.
|
||||
admin.GET("/plan/fetch", handler.AdminPlansFetch)
|
||||
admin.POST("/plan/save", handler.AdminPlanSave)
|
||||
admin.POST("/plan/update", handler.AdminPlanSave)
|
||||
admin.POST("/plan/drop", handler.AdminPlanDrop)
|
||||
admin.POST("/plan/sort", handler.AdminPlanSort)
|
||||
|
||||
admin.POST("/user/fetch", handler.AdminUsersFetch)
|
||||
admin.POST("/user/update", handler.AdminUserUpdate)
|
||||
admin.POST("/user/ban", handler.AdminUserBan)
|
||||
admin.POST("/user/delete", handler.AdminUserDelete)
|
||||
admin.POST("/user/destroy", handler.AdminUserDelete)
|
||||
admin.POST("/user/resetSecret", handler.AdminUserResetSecret)
|
||||
admin.POST("/user/sendMail", handler.AdminUserSendMail)
|
||||
|
||||
admin.POST("/order/fetch", handler.AdminOrdersFetch)
|
||||
admin.POST("/order/detail", handler.AdminOrderDetail)
|
||||
admin.POST("/order/paid", handler.AdminOrderPaid)
|
||||
admin.POST("/order/cancel", handler.AdminOrderCancel)
|
||||
admin.POST("/order/assign", handler.AdminOrderAssign)
|
||||
admin.POST("/order/update", handler.AdminOrderUpdate)
|
||||
|
||||
admin.POST("/ticket/fetch", handler.AdminTicketsFetch)
|
||||
|
||||
// Knowledge Base
|
||||
knowledgeGrp := admin.Group("/knowledge")
|
||||
{
|
||||
knowledgeGrp.GET("/fetch", handler.AdminKnowledgeFetch)
|
||||
knowledgeGrp.POST("/save", handler.AdminKnowledgeSave)
|
||||
knowledgeGrp.POST("/drop", handler.AdminKnowledgeDrop)
|
||||
knowledgeGrp.POST("/sort", handler.AdminKnowledgeSort)
|
||||
}
|
||||
|
||||
// Traffic Reset
|
||||
trafficResetGrp := admin.Group("/traffic-reset")
|
||||
{
|
||||
trafficResetGrp.GET("/fetch", handler.AdminTrafficResetFetch)
|
||||
}
|
||||
|
||||
// Real-name Verification
|
||||
realNameGrp := admin.Group("/realname")
|
||||
{
|
||||
realNameGrp.GET("/fetch", handler.PluginRealNameList)
|
||||
realNameGrp.POST("/review/:userId", handler.PluginRealNameReview)
|
||||
realNameGrp.POST("/reset/:userId", handler.PluginRealNameReset)
|
||||
realNameGrp.POST("/sync", handler.PluginRealNameSyncAll)
|
||||
realNameGrp.POST("/approve-all", handler.PluginRealNameApproveAll)
|
||||
}
|
||||
|
||||
// Servers / Nodes
|
||||
admin.GET("/server/group/fetch", handler.AdminServerGroupsFetch)
|
||||
admin.POST("/server/group/save", handler.AdminServerGroupSave)
|
||||
admin.POST("/server/group/drop", handler.AdminServerGroupDrop)
|
||||
|
||||
admin.GET("/server/manage/getNodes", handler.AdminServerManageGetNodes)
|
||||
admin.POST("/server/manage/save", handler.AdminServerManageSave)
|
||||
admin.POST("/server/manage/update", handler.AdminServerManageSave)
|
||||
admin.POST("/server/manage/drop", handler.AdminServerManageDrop)
|
||||
admin.POST("/server/manage/sort", handler.AdminServerManageSort)
|
||||
admin.POST("/server/manage/copy", handler.AdminServerManageCopy)
|
||||
|
||||
// Router / Route
|
||||
admin.GET("/server/route/fetch", handler.AdminServerRoutesFetch)
|
||||
admin.POST("/server/route/save", handler.AdminServerRouteSave)
|
||||
admin.POST("/server/route/drop", handler.AdminServerRouteDrop)
|
||||
|
||||
// Notice
|
||||
admin.GET("/notice/fetch", handler.AdminNoticeFetch)
|
||||
admin.POST("/notice/save", handler.AdminNoticeSave)
|
||||
admin.POST("/notice/drop", handler.AdminNoticeDrop)
|
||||
admin.POST("/notice/show", handler.AdminNoticeShow)
|
||||
admin.POST("/notice/sort", handler.AdminNoticeSort)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// SPA Fallback for Admin - only for non-API paths
|
||||
r.NoRoute(func(c *gin.Context) {
|
||||
path := c.Request.URL.Path
|
||||
// Don't serve SPA for API calls - let them return 404
|
||||
if strings.HasPrefix(path, "/api/") {
|
||||
c.JSON(404, gin.H{"message": "not found"})
|
||||
return
|
||||
}
|
||||
handler.AdminAppPage(c)
|
||||
})
|
||||
|
||||
// Start server
|
||||
log.Printf("Server starting on port %s", config.AppConfig.AppPort)
|
||||
if err := r.Run(":" + config.AppConfig.AppPort); err != nil {
|
||||
log.Fatalf("Failed to start server: %v", err)
|
||||
}
|
||||
}
|
||||
@@ -270,6 +270,8 @@ func registerAdminRoutesV2(v2 *gin.RouterGroup) {
|
||||
admin.POST("/realname/approve-all", handler.PluginRealNameApproveAll)
|
||||
admin.GET("/user-online-devices/users", handler.PluginUserOnlineDevicesUsers)
|
||||
admin.GET("/user-add-ipv6-subscription/users", handler.AdminIPv6SubscriptionUsers)
|
||||
admin.GET("/user-add-ipv6-subscription/config", handler.AdminIPv6SubscriptionConfigFetch)
|
||||
admin.POST("/user-add-ipv6-subscription/config", handler.AdminIPv6SubscriptionConfigSave)
|
||||
admin.POST("/user-add-ipv6-subscription/enable/:userId", handler.AdminIPv6SubscriptionEnable)
|
||||
admin.POST("/user-add-ipv6-subscription/sync-password/:userId", handler.AdminIPv6SubscriptionSyncPassword)
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,7 +2,7 @@ import { makeRecoveredPage } from "../../runtime/makeRecoveredPage.js";
|
||||
import ThemeConfigPageView from "./ThemeConfigPage.jsx";
|
||||
|
||||
export default makeRecoveredPage({
|
||||
title: "Theme Config",
|
||||
title: "Nebula Theme",
|
||||
routePath: "/config/theme",
|
||||
moduleId: "WQt",
|
||||
featureKey: "config.theme",
|
||||
|
||||
@@ -1,224 +1,282 @@
|
||||
import React, { useEffect, useState } from "../../../recovery-preview/node_modules/react/index.js";
|
||||
import {
|
||||
compactText,
|
||||
requestJson,
|
||||
} from "../../runtime/client.js";
|
||||
import { requestJson } from "../../runtime/client.js";
|
||||
|
||||
// Wot: Wrapper structure for the config page
|
||||
function Wot({ children }) {
|
||||
return <div className="recovery-live-page" style={{ padding: '2rem' }}>{children}</div>;
|
||||
return <div className="flex h-full w-full flex-col">{children}</div>;
|
||||
}
|
||||
|
||||
// Hot: Header component for sections or the page
|
||||
function Hot({ title, description }) {
|
||||
function Hot({ children }) {
|
||||
return (
|
||||
<header className="recovery-live-hero" style={{ marginBottom: '2.5rem', borderBottom: '1px solid var(--border-soft)', pb: '1.5rem' }}>
|
||||
<div style={{ maxWidth: '800px' }}>
|
||||
<p className="eyebrow" style={{ color: 'var(--brand-color)', fontWeight: '600', textTransform: 'uppercase', letterSpacing: '0.05em' }}>
|
||||
Theme Customization
|
||||
</p>
|
||||
<h2 style={{ fontSize: '2.25rem', marginBottom: '0.75rem' }}>{title}</h2>
|
||||
<p style={{ color: 'var(--text-muted)', fontSize: '1.1rem', lineHeight: '1.6' }}>{description}</p>
|
||||
</div>
|
||||
</header>
|
||||
);
|
||||
}
|
||||
|
||||
// zot: Setting Item (Zone) component for form fields
|
||||
function zot({ label, children, span = 1 }) {
|
||||
return (
|
||||
<div className={`recovery-table-card ${span === 2 ? 'span-2' : ''}`} style={{ padding: '1.25rem', background: 'var(--card-bg)', borderRadius: '12px', border: '1px solid var(--card-border)' }}>
|
||||
<label style={{ display: 'block', marginBottom: '0.75rem', fontWeight: '500', color: 'var(--text-main)' }}>{label}</label>
|
||||
<div className="form-control-wrapper">
|
||||
{children}
|
||||
</div>
|
||||
<div className="flex h-[var(--header-height)] flex-none items-center justify-between gap-4 bg-background p-4 md:px-8">
|
||||
{children}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
// QKt: The main Nebula configuration component
|
||||
function zot({ children }) {
|
||||
return <div className="flex-1 overflow-hidden px-4 py-6 md:px-8">{children}</div>;
|
||||
}
|
||||
|
||||
function Card({ title, description, children }) {
|
||||
return (
|
||||
<div className="rounded-xl border bg-card text-card-foreground shadow">
|
||||
<div className="flex flex-col space-y-1.5 p-6">
|
||||
<h3 className="font-semibold leading-none tracking-tight">{title}</h3>
|
||||
<p className="text-sm text-muted-foreground">{description}</p>
|
||||
</div>
|
||||
<div className="p-6 pt-0">{children}</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function Field({ label, description, children, span = 1 }) {
|
||||
return (
|
||||
<div className={span === 2 ? "space-y-2 md:col-span-2" : "space-y-2"}>
|
||||
<label className="text-sm font-medium leading-none">{label}</label>
|
||||
{children}
|
||||
<p className="text-[0.8rem] text-muted-foreground">{description}</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
const defaults = {
|
||||
nebula_theme_color: "aurora",
|
||||
nebula_hero_slogan: "",
|
||||
nebula_welcome_target: "",
|
||||
nebula_register_title: "",
|
||||
nebula_background_url: "",
|
||||
nebula_metrics_base_url: "",
|
||||
nebula_default_theme_mode: "system",
|
||||
nebula_light_logo_url: "",
|
||||
nebula_dark_logo_url: "",
|
||||
nebula_custom_html: "",
|
||||
nebula_static_cdn_url: "",
|
||||
};
|
||||
|
||||
const themeColorOptions = [
|
||||
{ value: "aurora", label: "Aurora" },
|
||||
{ value: "sunset", label: "Sunset" },
|
||||
{ value: "ember", label: "Ember" },
|
||||
{ value: "violet", label: "Violet" },
|
||||
];
|
||||
|
||||
const themeModeOptions = [
|
||||
{ value: "system", label: "Follow system" },
|
||||
{ value: "dark", label: "Prefer dark" },
|
||||
{ value: "light", label: "Prefer light" },
|
||||
];
|
||||
|
||||
function QKt() {
|
||||
const [form, setForm] = useState(defaults);
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [saving, setSaving] = useState(false);
|
||||
const [form, setForm] = useState({
|
||||
nebula_theme_color: 'aurora',
|
||||
nebula_hero_slogan: '',
|
||||
nebula_welcome_target: '',
|
||||
nebula_register_title: '',
|
||||
nebula_background_url: '',
|
||||
nebula_metrics_base_url: '',
|
||||
nebula_default_theme_mode: 'system',
|
||||
nebula_light_logo_url: '',
|
||||
nebula_dark_logo_url: '',
|
||||
nebula_custom_html: '',
|
||||
nebula_static_cdn_url: '',
|
||||
});
|
||||
const [error, setError] = useState("");
|
||||
const [success, setSuccess] = useState("");
|
||||
const [message, setMessage] = useState("");
|
||||
const [messageType, setMessageType] = useState("");
|
||||
|
||||
useEffect(() => {
|
||||
(async () => {
|
||||
try {
|
||||
const payload = await requestJson("/config/fetch?key=nebula");
|
||||
if (payload?.nebula) {
|
||||
setForm(prev => ({ ...prev, ...payload.nebula }));
|
||||
}
|
||||
} catch (err) {
|
||||
setError("Failed to load configuration: " + err.message);
|
||||
const nebula = payload?.data?.nebula || payload?.nebula || {};
|
||||
setForm((prev) => ({ ...prev, ...nebula }));
|
||||
} catch (error) {
|
||||
setMessage(error?.message || "Failed to load Nebula settings");
|
||||
setMessageType("error");
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
})();
|
||||
}, []);
|
||||
|
||||
const handleSave = async (e) => {
|
||||
e.preventDefault();
|
||||
const updateField = (key, value) => {
|
||||
setForm((prev) => ({ ...prev, [key]: value ?? "" }));
|
||||
};
|
||||
|
||||
const save = async () => {
|
||||
setSaving(true);
|
||||
setSuccess("");
|
||||
setError("");
|
||||
setMessage("");
|
||||
setMessageType("");
|
||||
try {
|
||||
await requestJson("/config/save", {
|
||||
method: "POST",
|
||||
body: form,
|
||||
});
|
||||
setSuccess("Nebula configuration updated successfully.");
|
||||
window.scrollTo({ top: 0, behavior: 'smooth' });
|
||||
} catch (err) {
|
||||
setError("Failed to save configuration: " + err.message);
|
||||
await requestJson("/config/save", { method: "POST", body: form });
|
||||
setMessage("Nebula settings saved");
|
||||
setMessageType("success");
|
||||
} catch (error) {
|
||||
setMessage(error?.message || "Failed to save Nebula settings");
|
||||
setMessageType("error");
|
||||
} finally {
|
||||
setSaving(false);
|
||||
}
|
||||
};
|
||||
|
||||
if (loading) return <Wot><div className="empty-cell">Initializing Nebula settings...</div></Wot>;
|
||||
|
||||
return (
|
||||
<Wot>
|
||||
<Hot
|
||||
title="Nebula Theme settings"
|
||||
description="Optimize your user dashboard with specific Nebula theme settings and branding options."
|
||||
/>
|
||||
|
||||
{error && <div className="toast toast-error" style={{ marginBottom: '1.5rem' }}>{error}</div>}
|
||||
{success && <div className="toast toast-success" style={{ marginBottom: '1.5rem' }}>{success}</div>}
|
||||
|
||||
<form onSubmit={handleSave} className="modal-grid" style={{ maxWidth: '1200px' }}>
|
||||
<zot label="Primary Accent Color" span={2}>
|
||||
<select
|
||||
value={form.nebula_theme_color}
|
||||
onChange={e => setForm({...form, nebula_theme_color: e.target.value})}
|
||||
className="recovery-input"
|
||||
style={{ width: '100%', height: '42px' }}
|
||||
<Hot>
|
||||
<div />
|
||||
<div className="flex items-center gap-3">
|
||||
<button
|
||||
type="button"
|
||||
className="inline-flex h-9 items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground shadow transition-colors hover:bg-primary/90 disabled:pointer-events-none disabled:opacity-50"
|
||||
onClick={save}
|
||||
disabled={loading || saving}
|
||||
>
|
||||
<option value="aurora">极光蓝 (Aurora Blue)</option>
|
||||
<option value="sunset">日落橙 (Sunset Orange)</option>
|
||||
<option value="ember">余烬红 (Ember Red)</option>
|
||||
<option value="violet">星云紫 (Violet Purple)</option>
|
||||
</select>
|
||||
</zot>
|
||||
|
||||
<zot label="Hero Slogan">
|
||||
<input
|
||||
className="recovery-input"
|
||||
value={form.nebula_hero_slogan}
|
||||
onChange={e => setForm({...form, nebula_hero_slogan: e.target.value})}
|
||||
placeholder="Main visual headline"
|
||||
/>
|
||||
</zot>
|
||||
|
||||
<zot label="Welcome Target">
|
||||
<input
|
||||
className="recovery-input"
|
||||
value={form.nebula_welcome_target}
|
||||
onChange={e => setForm({...form, nebula_welcome_target: e.target.value})}
|
||||
placeholder="Name displayed after WELCOME TO"
|
||||
/>
|
||||
</zot>
|
||||
|
||||
<zot label="Register Title">
|
||||
<input
|
||||
className="recovery-input"
|
||||
value={form.nebula_register_title}
|
||||
onChange={e => setForm({...form, nebula_register_title: e.target.value})}
|
||||
placeholder="Title on registration panel"
|
||||
/>
|
||||
</zot>
|
||||
|
||||
<zot label="Default Appearance">
|
||||
<select
|
||||
value={form.nebula_default_theme_mode}
|
||||
onChange={e => setForm({...form, nebula_default_theme_mode: e.target.value})}
|
||||
className="recovery-input"
|
||||
style={{ width: '100%', height: '42px' }}
|
||||
>
|
||||
<option value="system">Adaptive (System)</option>
|
||||
<option value="dark">Dark Theme</option>
|
||||
<option value="light">Light Theme</option>
|
||||
</select>
|
||||
</zot>
|
||||
|
||||
<zot label="Background Image URL">
|
||||
<input
|
||||
className="recovery-input"
|
||||
value={form.nebula_background_url}
|
||||
onChange={e => setForm({...form, nebula_background_url: e.target.value})}
|
||||
placeholder="Direct link to background image"
|
||||
/>
|
||||
</zot>
|
||||
|
||||
<zot label="Metrics API Domain">
|
||||
<input
|
||||
className="recovery-input"
|
||||
value={form.nebula_metrics_base_url}
|
||||
onChange={e => setForm({...form, nebula_metrics_base_url: e.target.value})}
|
||||
placeholder="https://stats.example.com"
|
||||
/>
|
||||
</zot>
|
||||
|
||||
<zot label="Light Mode Logo">
|
||||
<input
|
||||
className="recovery-input"
|
||||
value={form.nebula_light_logo_url}
|
||||
onChange={e => setForm({...form, nebula_light_logo_url: e.target.value})}
|
||||
placeholder="Logo for light mode"
|
||||
/>
|
||||
</zot>
|
||||
|
||||
<zot label="Dark Mode Logo">
|
||||
<input
|
||||
className="recovery-input"
|
||||
value={form.nebula_dark_logo_url}
|
||||
onChange={e => setForm({...form, nebula_dark_logo_url: e.target.value})}
|
||||
placeholder="Logo for dark mode"
|
||||
/>
|
||||
</zot>
|
||||
|
||||
<zot label="Static CDN Assets" span={2}>
|
||||
<input
|
||||
className="recovery-input"
|
||||
value={form.nebula_static_cdn_url}
|
||||
onChange={e => setForm({...form, nebula_static_cdn_url: e.target.value})}
|
||||
placeholder="e.g. https://cdn.example.com/nebula (no trailing slash)"
|
||||
/>
|
||||
</zot>
|
||||
|
||||
<zot label="Custom Scripts / CSS" span={2}>
|
||||
<textarea
|
||||
className="recovery-input"
|
||||
rows={6}
|
||||
value={form.nebula_custom_html}
|
||||
onChange={e => setForm({...form, nebula_custom_html: e.target.value})}
|
||||
placeholder="Add analytics codes or custom styles here"
|
||||
style={{ fontFamily: 'monospace' }}
|
||||
/>
|
||||
</zot>
|
||||
|
||||
<div className="span-2" style={{ marginTop: '2rem', display: 'flex', justifyContent: 'flex-end', borderTop: '1px solid var(--border-soft)', paddingTop: '1.5rem' }}>
|
||||
<button type="submit" className="primary-btn" disabled={saving}>
|
||||
{saving ? "Persisting..." : "Save Configuration"}
|
||||
{saving ? "Saving..." : "Save settings"}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</Hot>
|
||||
<zot>
|
||||
<div className="space-y-6">
|
||||
<header className="space-y-2">
|
||||
<h1 className="text-2xl font-bold tracking-tight">Nebula Theme</h1>
|
||||
<p className="text-muted-foreground">
|
||||
Configure Nebula theme colors, copywriting, branding assets, and custom injections.
|
||||
</p>
|
||||
</header>
|
||||
|
||||
{message ? (
|
||||
<div
|
||||
className={
|
||||
messageType === "success"
|
||||
? "rounded-lg border border-emerald-500/30 bg-emerald-500/10 px-4 py-3 text-sm text-emerald-600"
|
||||
: "rounded-lg border border-destructive/30 bg-destructive/10 px-4 py-3 text-sm text-destructive"
|
||||
}
|
||||
>
|
||||
{message}
|
||||
</div>
|
||||
) : null}
|
||||
|
||||
<Card
|
||||
title="Display"
|
||||
description="Set the primary color, theme mode, and hero copy shown by Nebula."
|
||||
>
|
||||
{loading ? (
|
||||
<div className="rounded-lg border border-dashed bg-muted/30 px-4 py-8 text-sm text-muted-foreground">
|
||||
Loading Nebula settings...
|
||||
</div>
|
||||
) : (
|
||||
<div className="grid gap-4 md:grid-cols-2">
|
||||
<Field label="Theme palette" description="Controls the default Nebula color palette.">
|
||||
<select
|
||||
className="flex h-9 w-full appearance-none rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
||||
value={form.nebula_theme_color}
|
||||
onChange={(event) => updateField("nebula_theme_color", event.target.value)}
|
||||
>
|
||||
{themeColorOptions.map((item) => (
|
||||
<option key={item.value} value={item.value}>
|
||||
{item.label}
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
</Field>
|
||||
|
||||
<Field
|
||||
label="Theme mode"
|
||||
description="Applied when a user opens the Nebula frontend for the first time."
|
||||
>
|
||||
<select
|
||||
className="flex h-9 w-full appearance-none rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
||||
value={form.nebula_default_theme_mode}
|
||||
onChange={(event) =>
|
||||
updateField("nebula_default_theme_mode", event.target.value)
|
||||
}
|
||||
>
|
||||
{themeModeOptions.map((item) => (
|
||||
<option key={item.value} value={item.value}>
|
||||
{item.label}
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
</Field>
|
||||
|
||||
<Field label="Hero slogan" description="Shown as the main title in the hero area.">
|
||||
<input
|
||||
className="flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
||||
value={form.nebula_hero_slogan}
|
||||
onChange={(event) => updateField("nebula_hero_slogan", event.target.value)}
|
||||
/>
|
||||
</Field>
|
||||
|
||||
<Field label="Welcome target" description="Appended after the Welcome to heading.">
|
||||
<input
|
||||
className="flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
||||
value={form.nebula_welcome_target}
|
||||
onChange={(event) => updateField("nebula_welcome_target", event.target.value)}
|
||||
/>
|
||||
</Field>
|
||||
|
||||
<Field label="Register title" description="Displayed at the top of the register panel.">
|
||||
<input
|
||||
className="flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
||||
value={form.nebula_register_title}
|
||||
onChange={(event) => updateField("nebula_register_title", event.target.value)}
|
||||
/>
|
||||
</Field>
|
||||
|
||||
<Field
|
||||
label="Metrics API URL"
|
||||
description="Base URL used when Nebula shows public metrics before login."
|
||||
>
|
||||
<input
|
||||
className="flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
||||
value={form.nebula_metrics_base_url}
|
||||
onChange={(event) => updateField("nebula_metrics_base_url", event.target.value)}
|
||||
/>
|
||||
</Field>
|
||||
</div>
|
||||
)}
|
||||
</Card>
|
||||
|
||||
<Card
|
||||
title="Branding"
|
||||
description="Set background assets, logo URLs, CDN roots, and custom HTML."
|
||||
>
|
||||
<div className="grid gap-4 md:grid-cols-2">
|
||||
<Field label="Background URL" description="Used by the Nebula login or landing background.">
|
||||
<input
|
||||
className="flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
||||
value={form.nebula_background_url}
|
||||
onChange={(event) => updateField("nebula_background_url", event.target.value)}
|
||||
/>
|
||||
</Field>
|
||||
|
||||
<Field label="Static CDN URL" description="Root CDN path for Nebula static assets.">
|
||||
<input
|
||||
className="flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
||||
value={form.nebula_static_cdn_url}
|
||||
onChange={(event) => updateField("nebula_static_cdn_url", event.target.value)}
|
||||
/>
|
||||
</Field>
|
||||
|
||||
<Field label="Light logo URL" description="Displayed while the light theme is active.">
|
||||
<input
|
||||
className="flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
||||
value={form.nebula_light_logo_url}
|
||||
onChange={(event) => updateField("nebula_light_logo_url", event.target.value)}
|
||||
/>
|
||||
</Field>
|
||||
|
||||
<Field label="Dark logo URL" description="Displayed while the dark theme is active.">
|
||||
<input
|
||||
className="flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
||||
value={form.nebula_dark_logo_url}
|
||||
onChange={(event) => updateField("nebula_dark_logo_url", event.target.value)}
|
||||
/>
|
||||
</Field>
|
||||
|
||||
<Field
|
||||
label="Custom HTML / scripts"
|
||||
description="Inject custom HTML, scripts, or styles into Nebula pages."
|
||||
span={2}
|
||||
>
|
||||
<textarea
|
||||
className="min-h-[220px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-xs shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
||||
value={form.nebula_custom_html}
|
||||
onChange={(event) => updateField("nebula_custom_html", event.target.value)}
|
||||
/>
|
||||
</Field>
|
||||
</div>
|
||||
</Card>
|
||||
</div>
|
||||
</zot>
|
||||
</Wot>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -157,6 +157,7 @@ func getAllConfigMappings() gin.H {
|
||||
"default_remind_traffic": service.MustGetBool("default_remind_traffic", true),
|
||||
"subscribe_path": service.MustGetString("subscribe_path", "s"),
|
||||
},
|
||||
"subscribe_template": service.GetAllSubscribeTemplates(),
|
||||
"frontend": gin.H{
|
||||
"frontend_theme": service.MustGetString("frontend_theme", "Xboard"),
|
||||
"frontend_theme_sidebar": service.MustGetString("frontend_theme_sidebar", "light"),
|
||||
@@ -202,7 +203,7 @@ func getAllConfigMappings() gin.H {
|
||||
"nebula_welcome_target": service.MustGetString("nebula_welcome_target", ""),
|
||||
"nebula_register_title": service.MustGetString("nebula_register_title", ""),
|
||||
"nebula_background_url": service.MustGetString("nebula_background_url", ""),
|
||||
"nebula_metrics_base_url": service.MustGetString("nebula_metrics_base_url", ""),
|
||||
"nebula_metrics_base_url": service.MustGetString("nebula_metrics_base_url", ""),
|
||||
"nebula_default_theme_mode": service.MustGetString("nebula_default_theme_mode", "system"),
|
||||
"nebula_light_logo_url": service.MustGetString("nebula_light_logo_url", ""),
|
||||
"nebula_dark_logo_url": service.MustGetString("nebula_dark_logo_url", ""),
|
||||
@@ -320,6 +321,9 @@ func settingGroupName(name string) string {
|
||||
"renew_order_event_id", "change_order_event_id", "show_info_to_server_enable",
|
||||
"show_protocol_to_server_enable", "default_remind_expire", "default_remind_traffic", "subscribe_path":
|
||||
return "subscribe"
|
||||
case "subscribe_template_singbox", "subscribe_template_clash", "subscribe_template_clashmeta",
|
||||
"subscribe_template_stash", "subscribe_template_surge", "subscribe_template_surfboard":
|
||||
return "subscribe_template"
|
||||
case "frontend_theme", "frontend_theme_sidebar", "frontend_theme_header", "frontend_theme_color", "frontend_background_url":
|
||||
return "frontend"
|
||||
case "server_token", "server_pull_interval", "server_push_interval", "device_limit_mode", "server_ws_enable", "server_ws_url":
|
||||
|
||||
@@ -579,8 +579,13 @@ func AdminUsersFetch(c *gin.Context) {
|
||||
page := parsePositiveInt(firstString(params["page"], params["current"]), 1)
|
||||
perPage := parsePositiveInt(firstString(params["per_page"], params["pageSize"]), 50)
|
||||
keyword := strings.TrimSpace(params["keyword"])
|
||||
suffix := service.GetPluginConfigString(service.PluginUserAddIPv6, "email_suffix", "-ipv6")
|
||||
shadowPattern := "%" + suffix + "@%"
|
||||
|
||||
query := database.DB.Model(&model.User{}).Preload("Plan").Order("id DESC")
|
||||
query := database.DB.Model(&model.User{}).
|
||||
Preload("Plan").
|
||||
Where("email NOT LIKE ?", shadowPattern).
|
||||
Order("id DESC")
|
||||
if keyword != "" {
|
||||
query = query.Where("email LIKE ? OR CAST(id AS CHAR) = ?", "%"+keyword+"%", keyword)
|
||||
}
|
||||
|
||||
@@ -39,16 +39,37 @@ func FulfillSubscription(c *gin.Context, user *model.User) {
|
||||
|
||||
ua := c.GetHeader("User-Agent")
|
||||
flag := c.Query("flag")
|
||||
uaLower := strings.ToLower(ua)
|
||||
|
||||
// 2. Handle specialized configs
|
||||
if strings.Contains(ua, "Clash") || flag == "clash" {
|
||||
config, _ := protocol.GenerateClash(servers, *user)
|
||||
if strings.Contains(uaLower, "stash") || flag == "stash" {
|
||||
config, _ := protocol.GenerateClashWithTemplate("stash", servers, *user)
|
||||
c.Header("Content-Type", "application/octet-stream")
|
||||
c.String(http.StatusOK, config)
|
||||
return
|
||||
}
|
||||
|
||||
if strings.Contains(strings.ToLower(ua), "sing-box") || flag == "sing-box" {
|
||||
if strings.Contains(uaLower, "clashmeta") ||
|
||||
strings.Contains(uaLower, "clash meta") ||
|
||||
strings.Contains(uaLower, "metacubex") ||
|
||||
strings.Contains(uaLower, "verge") ||
|
||||
strings.Contains(uaLower, "flclash") ||
|
||||
strings.Contains(uaLower, "nekobox") ||
|
||||
flag == "clashmeta" || flag == "clash-meta" {
|
||||
config, _ := protocol.GenerateClashWithTemplate("clashmeta", servers, *user)
|
||||
c.Header("Content-Type", "application/octet-stream")
|
||||
c.String(http.StatusOK, config)
|
||||
return
|
||||
}
|
||||
|
||||
if strings.Contains(ua, "Clash") || flag == "clash" {
|
||||
config, _ := protocol.GenerateClashWithTemplate("clash", servers, *user)
|
||||
c.Header("Content-Type", "application/octet-stream")
|
||||
c.String(http.StatusOK, config)
|
||||
return
|
||||
}
|
||||
|
||||
if strings.Contains(uaLower, "sing-box") || flag == "sing-box" {
|
||||
config, _ := protocol.GenerateSingBox(servers, *user)
|
||||
c.Header("Content-Type", "application/json; charset=utf-8")
|
||||
c.String(http.StatusOK, config)
|
||||
@@ -99,7 +120,7 @@ func filterServers(servers []model.Server, types, filter string) []model.Server
|
||||
|
||||
func generateInfoNodes(user *model.User) []string {
|
||||
var nodes []string
|
||||
|
||||
|
||||
// Expire Info
|
||||
expireDate := "长期有效"
|
||||
if user.ExpiredAt != nil {
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
"xboard-go/internal/database"
|
||||
@@ -11,6 +13,31 @@ import (
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func ipv6StatusPresentation(status string, allowed bool) (string, string, string) {
|
||||
status = strings.TrimSpace(strings.ToLower(status))
|
||||
switch status {
|
||||
case "active":
|
||||
return "active", "IPv6 enabled", ""
|
||||
case "eligible":
|
||||
return "eligible", "Ready to enable", ""
|
||||
case "", "not_allowed", "not_eligible", "disallowed":
|
||||
if allowed {
|
||||
return "eligible", "Ready to enable", ""
|
||||
}
|
||||
return "not_allowed", "Not eligible", "Current plan or group is not allowed to enable IPv6"
|
||||
default:
|
||||
label := strings.ReplaceAll(strings.Title(strings.ReplaceAll(status, "_", " ")), "Ipv6", "IPv6")
|
||||
if strings.EqualFold(label, "Not Allowed") {
|
||||
label = "Not eligible"
|
||||
}
|
||||
reason := ""
|
||||
if !allowed && (status == "not_allowed" || status == "not_eligible") {
|
||||
reason = "Current plan or group is not allowed to enable IPv6"
|
||||
}
|
||||
return status, label, reason
|
||||
}
|
||||
}
|
||||
|
||||
func PluginUserOnlineDevicesUsers(c *gin.Context) {
|
||||
|
||||
page := parsePositiveInt(c.DefaultQuery("page", "1"), 1)
|
||||
@@ -165,7 +192,7 @@ func AdminIPv6SubscriptionUsers(c *gin.Context) {
|
||||
shadowByParentID := make(map[int]model.User, len(userIDs))
|
||||
if len(userIDs) > 0 {
|
||||
var shadowUsers []model.User
|
||||
if err := database.DB.Where("parent_id IN ?", userIDs).Find(&shadowUsers).Error; err == nil {
|
||||
if err := database.DB.Preload("Plan").Where("parent_id IN ?", userIDs).Find(&shadowUsers).Error; err == nil {
|
||||
for _, shadow := range shadowUsers {
|
||||
if shadow.ParentID != nil {
|
||||
shadowByParentID[*shadow.ParentID] = shadow
|
||||
@@ -173,6 +200,17 @@ func AdminIPv6SubscriptionUsers(c *gin.Context) {
|
||||
}
|
||||
}
|
||||
}
|
||||
shadowPlanID := parsePositiveInt(
|
||||
service.GetPluginConfigString(service.PluginUserAddIPv6, "ipv6_plan_id", "0"),
|
||||
0,
|
||||
)
|
||||
planNames := make(map[int]string)
|
||||
var plans []model.Plan
|
||||
if err := database.DB.Select("id", "name").Find(&plans).Error; err == nil {
|
||||
for _, plan := range plans {
|
||||
planNames[plan.ID] = plan.Name
|
||||
}
|
||||
}
|
||||
|
||||
list := make([]gin.H, 0, len(users))
|
||||
for _, user := range users {
|
||||
@@ -191,32 +229,30 @@ func AdminIPv6SubscriptionUsers(c *gin.Context) {
|
||||
}
|
||||
allowed := service.PluginUserAllowed(&user, user.Plan)
|
||||
status := "not_allowed"
|
||||
statusLabel := "Not eligible"
|
||||
if allowed {
|
||||
status = "eligible"
|
||||
statusLabel = "Ready to enable"
|
||||
planID := shadowPlanID
|
||||
planNameValue := planNames[shadowPlanID]
|
||||
if hasShadowUser {
|
||||
planID = intFromPointer(shadowUser.PlanID)
|
||||
planNameValue = planName(shadowUser.Plan)
|
||||
}
|
||||
shadowUserID := 0
|
||||
shadowUpdatedAt := int64(0)
|
||||
if hasSubscription {
|
||||
status = firstString(subscription.Status, status)
|
||||
statusLabel = "IPv6 enabled"
|
||||
if subscription.Status != "active" && subscription.Status != "" {
|
||||
statusLabel = strings.ReplaceAll(strings.Title(strings.ReplaceAll(subscription.Status, "_", " ")), "Ipv6", "IPv6")
|
||||
}
|
||||
if subscription.ShadowUserID != nil {
|
||||
shadowUserID = *subscription.ShadowUserID
|
||||
}
|
||||
shadowUpdatedAt = subscription.UpdatedAt
|
||||
} else if allowed {
|
||||
statusLabel = "Ready to enable"
|
||||
}
|
||||
effectiveAllowed := allowed || hasSubscription && subscription.Allowed
|
||||
status, statusLabel, _ := ipv6StatusPresentation(status, effectiveAllowed)
|
||||
|
||||
list = append(list, gin.H{
|
||||
"id": user.ID,
|
||||
"email": user.Email,
|
||||
"plan_name": planName(user.Plan),
|
||||
"allowed": allowed || hasSubscription && subscription.Allowed,
|
||||
"plan_id": planID,
|
||||
"plan_name": firstString(planNameValue, "-"),
|
||||
"allowed": effectiveAllowed,
|
||||
"is_active": hasSubscription && subscription.Status == "active",
|
||||
"status": status,
|
||||
"status_label": statusLabel,
|
||||
@@ -238,6 +274,71 @@ func AdminIPv6SubscriptionUsers(c *gin.Context) {
|
||||
})
|
||||
}
|
||||
|
||||
func AdminIPv6SubscriptionConfigFetch(c *gin.Context) {
|
||||
cfg := service.GetPluginConfig(service.PluginUserAddIPv6)
|
||||
Success(c, gin.H{
|
||||
"ipv6_plan_id": parsePositiveInt(service.GetPluginConfigString(service.PluginUserAddIPv6, "ipv6_plan_id", "0"), 0),
|
||||
"allowed_plans": service.GetPluginConfigIntList(service.PluginUserAddIPv6, "allowed_plans"),
|
||||
"allowed_groups": service.GetPluginConfigIntList(service.PluginUserAddIPv6, "allowed_groups"),
|
||||
"email_suffix": firstString(stringFromAny(cfg["email_suffix"]), "-ipv6"),
|
||||
"reference_flag": firstString(stringFromAny(cfg["reference_flag"]), "ipv6"),
|
||||
})
|
||||
}
|
||||
|
||||
func AdminIPv6SubscriptionConfigSave(c *gin.Context) {
|
||||
var payload struct {
|
||||
IPv6PlanID int `json:"ipv6_plan_id"`
|
||||
}
|
||||
if err := c.ShouldBindJSON(&payload); err != nil {
|
||||
Fail(c, http.StatusBadRequest, "invalid request body")
|
||||
return
|
||||
}
|
||||
|
||||
var plugin model.Plugin
|
||||
err := database.DB.Where("code = ?", service.PluginUserAddIPv6).First(&plugin).Error
|
||||
if err != nil {
|
||||
plugin = model.Plugin{
|
||||
Code: service.PluginUserAddIPv6,
|
||||
Name: "IPv6 Subscription",
|
||||
IsEnabled: true,
|
||||
}
|
||||
}
|
||||
|
||||
cfg := service.GetPluginConfig(service.PluginUserAddIPv6)
|
||||
if payload.IPv6PlanID > 0 {
|
||||
cfg["ipv6_plan_id"] = payload.IPv6PlanID
|
||||
} else {
|
||||
delete(cfg, "ipv6_plan_id")
|
||||
}
|
||||
|
||||
raw, marshalErr := json.Marshal(cfg)
|
||||
if marshalErr != nil {
|
||||
Fail(c, http.StatusInternalServerError, "failed to encode plugin config")
|
||||
return
|
||||
}
|
||||
configText := string(raw)
|
||||
plugin.Config = &configText
|
||||
|
||||
if plugin.ID > 0 {
|
||||
if updateErr := database.DB.Model(&model.Plugin{}).Where("id = ?", plugin.ID).Updates(map[string]any{
|
||||
"config": plugin.Config,
|
||||
"is_enabled": plugin.IsEnabled,
|
||||
}).Error; updateErr != nil {
|
||||
Fail(c, http.StatusInternalServerError, "failed to save plugin config")
|
||||
return
|
||||
}
|
||||
} else {
|
||||
if createErr := database.DB.Create(&plugin).Error; createErr != nil {
|
||||
Fail(c, http.StatusInternalServerError, "failed to create plugin config")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
Success(c, gin.H{
|
||||
"ipv6_plan_id": payload.IPv6PlanID,
|
||||
})
|
||||
}
|
||||
|
||||
func AdminIPv6SubscriptionEnable(c *gin.Context) {
|
||||
userID := parsePositiveInt(c.Param("userId"), 0)
|
||||
if userID == 0 {
|
||||
@@ -346,24 +447,14 @@ func PluginUserAddIPv6Check(c *gin.Context) {
|
||||
hasSubscription := database.DB.Where("user_id = ?", user.ID).First(&subscription).Error == nil
|
||||
allowed := service.PluginUserAllowed(user, plan)
|
||||
status := "not_allowed"
|
||||
statusLabel := "Not eligible"
|
||||
reason := "Current plan or group is not allowed to enable IPv6"
|
||||
if allowed {
|
||||
status = "eligible"
|
||||
statusLabel = "Ready to enable"
|
||||
reason = ""
|
||||
}
|
||||
if hasSubscription {
|
||||
status = firstString(subscription.Status, "active")
|
||||
statusLabel = "IPv6 enabled"
|
||||
reason = ""
|
||||
if subscription.Status != "active" && subscription.Status != "" {
|
||||
statusLabel = strings.ReplaceAll(strings.Title(strings.ReplaceAll(subscription.Status, "_", " ")), "Ipv6", "IPv6")
|
||||
}
|
||||
}
|
||||
effectiveAllowed := allowed || hasSubscription && subscription.Allowed
|
||||
status, statusLabel, reason := ipv6StatusPresentation(status, effectiveAllowed)
|
||||
|
||||
Success(c, gin.H{
|
||||
"allowed": allowed || hasSubscription && subscription.Allowed,
|
||||
"allowed": effectiveAllowed,
|
||||
"is_active": hasSubscription && subscription.Status == "active",
|
||||
"status": status,
|
||||
"status_label": statusLabel,
|
||||
|
||||
@@ -5,37 +5,195 @@ import (
|
||||
"strings"
|
||||
"xboard-go/internal/model"
|
||||
"xboard-go/internal/service"
|
||||
|
||||
"github.com/goccy/go-yaml"
|
||||
)
|
||||
|
||||
func GenerateClash(servers []model.Server, user model.User) (string, error) {
|
||||
return GenerateClashWithTemplate("clash", servers, user)
|
||||
}
|
||||
|
||||
func GenerateClashWithTemplate(templateName string, servers []model.Server, user model.User) (string, error) {
|
||||
template := strings.TrimSpace(service.GetSubscribeTemplate(templateName))
|
||||
if template == "" {
|
||||
return generateClashFallback(servers, user), nil
|
||||
}
|
||||
|
||||
var config map[string]any
|
||||
if err := yaml.Unmarshal([]byte(template), &config); err != nil {
|
||||
return generateClashFallback(servers, user), nil
|
||||
}
|
||||
|
||||
proxies := make([]any, 0, len(servers))
|
||||
proxyNames := make([]string, 0, len(servers))
|
||||
for _, s := range servers {
|
||||
conf := service.BuildNodeConfig(&s)
|
||||
proxy := buildClashProxy(conf, user)
|
||||
if proxy == nil {
|
||||
continue
|
||||
}
|
||||
proxies = append(proxies, proxy)
|
||||
proxyNames = append(proxyNames, conf.Name)
|
||||
}
|
||||
|
||||
config["proxies"] = append(anySlice(config["proxies"]), proxies...)
|
||||
config["proxy-groups"] = mergeClashProxyGroups(anySlice(config["proxy-groups"]), proxyNames)
|
||||
|
||||
if _, ok := config["rules"]; !ok {
|
||||
config["rules"] = []any{"MATCH,Proxy"}
|
||||
}
|
||||
|
||||
data, err := yaml.Marshal(config)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
output := strings.ReplaceAll(string(data), "$app_name", service.MustGetString("app_name", "XBoard"))
|
||||
return output, nil
|
||||
}
|
||||
|
||||
func buildClashProxy(conf service.NodeServerConfig, user model.User) map[string]any {
|
||||
switch conf.Protocol {
|
||||
case "shadowsocks":
|
||||
cipher, _ := conf.Cipher.(string)
|
||||
return map[string]any{
|
||||
"name": conf.Name,
|
||||
"type": "ss",
|
||||
"server": conf.RawHost,
|
||||
"port": conf.ServerPort,
|
||||
"cipher": cipher,
|
||||
"password": user.UUID,
|
||||
}
|
||||
case "vmess":
|
||||
return map[string]any{
|
||||
"name": conf.Name,
|
||||
"type": "vmess",
|
||||
"server": conf.RawHost,
|
||||
"port": conf.ServerPort,
|
||||
"uuid": user.UUID,
|
||||
"alterId": 0,
|
||||
"cipher": "auto",
|
||||
"udp": true,
|
||||
}
|
||||
case "trojan":
|
||||
return map[string]any{
|
||||
"name": conf.Name,
|
||||
"type": "trojan",
|
||||
"server": conf.RawHost,
|
||||
"port": conf.ServerPort,
|
||||
"password": user.UUID,
|
||||
"udp": true,
|
||||
}
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func mergeClashProxyGroups(groups []any, proxyNames []string) []any {
|
||||
if len(groups) == 0 {
|
||||
return []any{
|
||||
map[string]any{
|
||||
"name": "Proxy",
|
||||
"type": "select",
|
||||
"proxies": append([]any{"DIRECT"}, stringsToAny(proxyNames)...),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
for index, item := range groups {
|
||||
group, ok := item.(map[string]any)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
|
||||
group["proxies"] = appendUniqueAny(anySlice(group["proxies"]), stringsToAny(proxyNames)...)
|
||||
groups[index] = group
|
||||
}
|
||||
return groups
|
||||
}
|
||||
|
||||
func anySlice(value any) []any {
|
||||
switch typed := value.(type) {
|
||||
case nil:
|
||||
return []any{}
|
||||
case []any:
|
||||
return append([]any{}, typed...)
|
||||
case []string:
|
||||
result := make([]any, 0, len(typed))
|
||||
for _, item := range typed {
|
||||
result = append(result, item)
|
||||
}
|
||||
return result
|
||||
default:
|
||||
return []any{}
|
||||
}
|
||||
}
|
||||
|
||||
func stringsToAny(values []string) []any {
|
||||
result := make([]any, 0, len(values))
|
||||
for _, value := range values {
|
||||
result = append(result, value)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func appendUniqueAny(base []any, values ...any) []any {
|
||||
existing := make(map[string]struct{}, len(base))
|
||||
for _, item := range base {
|
||||
existing[fmt.Sprint(item)] = struct{}{}
|
||||
}
|
||||
|
||||
for _, item := range values {
|
||||
key := fmt.Sprint(item)
|
||||
if _, ok := existing[key]; ok {
|
||||
continue
|
||||
}
|
||||
base = append(base, item)
|
||||
existing[key] = struct{}{}
|
||||
}
|
||||
return base
|
||||
}
|
||||
|
||||
func generateClashFallback(servers []model.Server, user model.User) string {
|
||||
var builder strings.Builder
|
||||
|
||||
builder.WriteString("proxies:\n")
|
||||
var proxyNames []string
|
||||
for _, s := range servers {
|
||||
conf := service.BuildNodeConfig(&s)
|
||||
proxy := ""
|
||||
|
||||
switch conf.Protocol {
|
||||
case "shadowsocks":
|
||||
cipher := ""
|
||||
if c, ok := conf.Cipher.(string); ok { cipher = c }
|
||||
proxy = fmt.Sprintf(" - name: \"%s\"\n type: ss\n server: %s\n port: %d\n cipher: %s\n password: %s\n",
|
||||
conf.Name, conf.RawHost, conf.ServerPort, cipher, user.UUID)
|
||||
case "vmess":
|
||||
proxy = fmt.Sprintf(" - name: \"%s\"\n type: vmess\n server: %s\n port: %d\n uuid: %s\n alterId: 0\n cipher: auto\n udp: true\n",
|
||||
conf.Name, conf.RawHost, conf.ServerPort, user.UUID)
|
||||
case "trojan":
|
||||
proxy = fmt.Sprintf(" - name: \"%s\"\n type: trojan\n server: %s\n port: %d\n password: %s\n udp: true\n",
|
||||
conf.Name, conf.RawHost, conf.ServerPort, user.UUID)
|
||||
default:
|
||||
proxy := buildClashProxy(conf, user)
|
||||
if proxy == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
if proxy != "" {
|
||||
builder.WriteString(proxy)
|
||||
proxyNames = append(proxyNames, fmt.Sprintf("\"%s\"", conf.Name))
|
||||
switch proxy["type"] {
|
||||
case "ss":
|
||||
builder.WriteString(fmt.Sprintf(
|
||||
" - name: \"%s\"\n type: ss\n server: %s\n port: %d\n cipher: %s\n password: %s\n",
|
||||
conf.Name,
|
||||
conf.RawHost,
|
||||
conf.ServerPort,
|
||||
fmt.Sprint(proxy["cipher"]),
|
||||
user.UUID,
|
||||
))
|
||||
case "vmess":
|
||||
builder.WriteString(fmt.Sprintf(
|
||||
" - name: \"%s\"\n type: vmess\n server: %s\n port: %d\n uuid: %s\n alterId: 0\n cipher: auto\n udp: true\n",
|
||||
conf.Name,
|
||||
conf.RawHost,
|
||||
conf.ServerPort,
|
||||
user.UUID,
|
||||
))
|
||||
case "trojan":
|
||||
builder.WriteString(fmt.Sprintf(
|
||||
" - name: \"%s\"\n type: trojan\n server: %s\n port: %d\n password: %s\n udp: true\n",
|
||||
conf.Name,
|
||||
conf.RawHost,
|
||||
conf.ServerPort,
|
||||
user.UUID,
|
||||
))
|
||||
}
|
||||
proxyNames = append(proxyNames, fmt.Sprintf("\"%s\"", conf.Name))
|
||||
}
|
||||
|
||||
builder.WriteString("\nproxy-groups:\n")
|
||||
@@ -47,5 +205,5 @@ func GenerateClash(servers []model.Server, user model.User) (string, error) {
|
||||
builder.WriteString("\nrules:\n")
|
||||
builder.WriteString(" - MATCH,Proxy\n")
|
||||
|
||||
return builder.String(), nil
|
||||
return builder.String()
|
||||
}
|
||||
|
||||
@@ -11,6 +11,81 @@ type SingBoxConfig struct {
|
||||
}
|
||||
|
||||
func GenerateSingBox(servers []model.Server, user model.User) (string, error) {
|
||||
template := service.GetSubscribeTemplate("singbox")
|
||||
if template == "" {
|
||||
return generateSingBoxFallback(servers, user)
|
||||
}
|
||||
|
||||
var config map[string]any
|
||||
if err := json.Unmarshal([]byte(template), &config); err != nil {
|
||||
return generateSingBoxFallback(servers, user)
|
||||
}
|
||||
|
||||
outbounds := make([]any, 0, len(servers))
|
||||
proxyTags := make([]string, 0, len(servers))
|
||||
for _, s := range servers {
|
||||
conf := service.BuildNodeConfig(&s)
|
||||
outbound := buildSingBoxOutbound(conf, user)
|
||||
if outbound == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
outbounds = append(outbounds, outbound)
|
||||
proxyTags = append(proxyTags, conf.Name)
|
||||
}
|
||||
|
||||
existingOutbounds := anySlice(config["outbounds"])
|
||||
for index, item := range existingOutbounds {
|
||||
outbound, ok := item.(map[string]any)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
|
||||
outboundType, _ := outbound["type"].(string)
|
||||
if outboundType != "selector" && outboundType != "urltest" {
|
||||
continue
|
||||
}
|
||||
|
||||
outbound["outbounds"] = appendUniqueAny(anySlice(outbound["outbounds"]), stringsToAny(proxyTags)...)
|
||||
existingOutbounds[index] = outbound
|
||||
}
|
||||
|
||||
config["outbounds"] = append(existingOutbounds, outbounds...)
|
||||
|
||||
data, err := json.MarshalIndent(config, "", " ")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(data), nil
|
||||
}
|
||||
|
||||
func buildSingBoxOutbound(conf service.NodeServerConfig, user model.User) map[string]any {
|
||||
outbound := map[string]any{
|
||||
"tag": conf.Name,
|
||||
"server": conf.RawHost,
|
||||
"server_port": conf.ServerPort,
|
||||
}
|
||||
|
||||
switch conf.Protocol {
|
||||
case "shadowsocks":
|
||||
outbound["type"] = "shadowsocks"
|
||||
outbound["method"] = conf.Cipher
|
||||
outbound["password"] = user.UUID
|
||||
case "vmess":
|
||||
outbound["type"] = "vmess"
|
||||
outbound["uuid"] = user.UUID
|
||||
outbound["security"] = "auto"
|
||||
case "trojan":
|
||||
outbound["type"] = "trojan"
|
||||
outbound["password"] = user.UUID
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
|
||||
return outbound
|
||||
}
|
||||
|
||||
func generateSingBoxFallback(servers []model.Server, user model.User) (string, error) {
|
||||
outbounds := []map[string]interface{}{}
|
||||
proxyTags := []string{}
|
||||
|
||||
@@ -42,7 +117,6 @@ func GenerateSingBox(servers []model.Server, user model.User) (string, error) {
|
||||
proxyTags = append(proxyTags, conf.Name)
|
||||
}
|
||||
|
||||
// Add selector
|
||||
selector := map[string]interface{}{
|
||||
"type": "selector",
|
||||
"tag": "Proxy",
|
||||
|
||||
56
internal/service/subscribe_templates.go
Normal file
56
internal/service/subscribe_templates.go
Normal file
@@ -0,0 +1,56 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sort"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var subscribeTemplateFiles = map[string]string{
|
||||
"singbox": filepath.Join("submodule", "singbox.json"),
|
||||
"clash": filepath.Join("submodule", "clash.yaml"),
|
||||
"clashmeta": filepath.Join("submodule", "clash-meta.yaml"),
|
||||
"stash": filepath.Join("submodule", "stash.yaml"),
|
||||
"surge": filepath.Join("submodule", "surge.toml"),
|
||||
"surfboard": filepath.Join("submodule", "surfboard.toml"),
|
||||
}
|
||||
|
||||
func SubscribeTemplateSettingKey(name string) string {
|
||||
return "subscribe_template_" + strings.TrimSpace(strings.ToLower(name))
|
||||
}
|
||||
|
||||
func DefaultSubscribeTemplate(name string) string {
|
||||
path, ok := subscribeTemplateFiles[strings.TrimSpace(strings.ToLower(name))]
|
||||
if !ok {
|
||||
return ""
|
||||
}
|
||||
|
||||
content, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
return string(content)
|
||||
}
|
||||
|
||||
func GetSubscribeTemplate(name string) string {
|
||||
key := SubscribeTemplateSettingKey(name)
|
||||
if value, ok := GetSetting(key); ok && strings.TrimSpace(value) != "" {
|
||||
return value
|
||||
}
|
||||
return DefaultSubscribeTemplate(name)
|
||||
}
|
||||
|
||||
func GetAllSubscribeTemplates() map[string]string {
|
||||
keys := make([]string, 0, len(subscribeTemplateFiles))
|
||||
for key := range subscribeTemplateFiles {
|
||||
keys = append(keys, key)
|
||||
}
|
||||
sort.Strings(keys)
|
||||
|
||||
result := make(map[string]string, len(keys))
|
||||
for _, key := range keys {
|
||||
result[SubscribeTemplateSettingKey(key)] = GetSubscribeTemplate(key)
|
||||
}
|
||||
return result
|
||||
}
|
||||
493
submodule/clash-meta.yaml
Normal file
493
submodule/clash-meta.yaml
Normal file
@@ -0,0 +1,493 @@
|
||||
port: 7890
|
||||
socks-port: 7891
|
||||
allow-lan: true
|
||||
ipv6: true
|
||||
bind-address: "*"
|
||||
mode: Rule
|
||||
log-level: info
|
||||
external-controller: 127.0.0.1:9090
|
||||
tcp-concurrent: true
|
||||
find-process-mode: strict
|
||||
geodata-mode: true #【Meta专属】使用geoip.dat数据库(默认:false使用mmdb数据库)
|
||||
geodata-loader: standard
|
||||
geo-auto-update: true
|
||||
geo-update-interval: 24
|
||||
geox-url:
|
||||
geoip: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat"
|
||||
geosite: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat"
|
||||
mmdb: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.metadb"
|
||||
asn: "https://github.com/xishang0128/geoip/releases/download/latest/GeoLite2-ASN.mmdb"
|
||||
experimental:
|
||||
ignore-resolve-fail: true
|
||||
dns:
|
||||
enable: true
|
||||
listen: 1053
|
||||
ipv6: false
|
||||
default-nameserver:
|
||||
- 1.1.1.1
|
||||
- 8.8.8.8
|
||||
nameserver:
|
||||
- https://1.1.1.1/dns-query # Cloudflare(支持 H3)
|
||||
- https://dns.google/dns-query # Google(支持 H3)
|
||||
- 1.1.1.1 # Cloudflare Public DNS (UDP)
|
||||
- 8.8.8.8 # Google Public DNS (UDP)
|
||||
proxy-server-nameserver:
|
||||
- https://doh.pub/dns-query
|
||||
- 223.5.5.5
|
||||
nameserver-policy:
|
||||
"geosite:cn,private": # 国内域名和私有域名强制走国内 DNS
|
||||
- https://223.5.5.5/dns-query # 阿里
|
||||
- https://doh.pub/dns-query # 腾讯
|
||||
- 223.5.5.5 # 阿里 UDP
|
||||
- 119.29.29.29 # 腾讯 UDP
|
||||
"geo:cn": # 也可以用 geo:cn 匹配 IP
|
||||
- https://223.5.5.5/dns-query
|
||||
- https://doh.pub/dns-query
|
||||
- 223.5.5.5 # 阿里 UDP
|
||||
- 119.29.29.29 # 腾讯 UDP
|
||||
"geosite:gfw": # 新增:GFW 列表域名强制走国外 DNS
|
||||
- https://cloudflare-dns.com/dns-query
|
||||
- https://dns.google/dns-query
|
||||
- 1.1.1.1
|
||||
- 8.8.8.8
|
||||
"geosite:geolocation-!cn": # 新增:非中国大陆域名强制走国外 DNS
|
||||
- https://cloudflare-dns.com/dns-query
|
||||
- https://dns.google/dns-query
|
||||
- 1.1.1.1
|
||||
- 8.8.8.8
|
||||
"full-nameserver": # 新增:最终兜底,所有未匹配的域名查询强制走国外 DNS
|
||||
- https://cloudflare-dns.com/dns-query
|
||||
- https://dns.google/dns-query
|
||||
- 1.1.1.1
|
||||
- 8.8.8.8
|
||||
fallback:
|
||||
- tls://8.8.4.4
|
||||
- tls://1.1.1.1
|
||||
fallback-filter:
|
||||
geoip: true
|
||||
geoip-code: CN
|
||||
geosite:
|
||||
- gfw
|
||||
ipcidr:
|
||||
- 240.0.0.0/4
|
||||
domain:
|
||||
- +.google.com
|
||||
- +.facebook.com
|
||||
- +.youtube.com
|
||||
- +.githubusercontent.com
|
||||
- +.googlevideo.com
|
||||
- +.msftconnecttest.com
|
||||
- +.msftncsi.com
|
||||
- msftconnecttest.com
|
||||
- msftncsi.com
|
||||
enhanced-mode: fake-ip
|
||||
fake-ip-range: 198.18.0.1/16
|
||||
fake-ip-filter-mode: blacklist
|
||||
fake-ip-filter:
|
||||
- "*.lan"
|
||||
- "*.localdomain"
|
||||
- "*.example"
|
||||
- "*.invalid"
|
||||
- "*.localhost"
|
||||
- "*.test"
|
||||
- "*.local"
|
||||
- "*.home.arpa"
|
||||
- "*.direct"
|
||||
- "*.orb.local"
|
||||
- "*.ip6-localhost"
|
||||
- "*.ip6-loopback"
|
||||
- "time.*.com"
|
||||
- "time.*.gov"
|
||||
- "time.*.edu.cn"
|
||||
- "time.*.apple.com"
|
||||
- "time-ios.apple.com"
|
||||
- "time1.*.com"
|
||||
- "time2.*.com"
|
||||
- "time3.*.com"
|
||||
- "time4.*.com"
|
||||
- "time5.*.com"
|
||||
- "time6.*.com"
|
||||
- "time7.*.com"
|
||||
- "ntp.*.com"
|
||||
- "ntp1.*.com"
|
||||
- "ntp2.*.com"
|
||||
- "ntp3.*.com"
|
||||
- "ntp4.*.com"
|
||||
- "ntp5.*.com"
|
||||
- "ntp6.*.com"
|
||||
- "ntp7.*.com"
|
||||
- "*.time.edu.cn"
|
||||
- "*.ntp.org.cn"
|
||||
- "+.pool.ntp.org"
|
||||
- "time1.cloud.tencent.com"
|
||||
- "music.163.com"
|
||||
- "*.music.163.com"
|
||||
- "*.126.net"
|
||||
- "musicapi.taihe.com"
|
||||
- "music.taihe.com"
|
||||
- "songsearch.kugou.com"
|
||||
- "trackercdn.kugou.com"
|
||||
- "*.kuwo.cn"
|
||||
- "api-jooxtt.sanook.com"
|
||||
- "api.joox.com"
|
||||
- "joox.com"
|
||||
- "y.qq.com"
|
||||
- "*.y.qq.com"
|
||||
- "streamoc.music.tc.qq.com"
|
||||
- "mobileoc.music.tc.qq.com"
|
||||
- "isure.stream.qqmusic.qq.com"
|
||||
- "dl.stream.qqmusic.qq.com"
|
||||
- "aqqmusic.tc.qq.com"
|
||||
- "amobile.music.tc.qq.com"
|
||||
- "*.xiami.com"
|
||||
- "*.music.migu.cn"
|
||||
- "music.migu.cn"
|
||||
- "+.msftconnecttest.com"
|
||||
- "+.msftncsi.com"
|
||||
- "localhost.ptlogin2.qq.com"
|
||||
- "localhost.sec.qq.com"
|
||||
- "localhost.*.weixin.qq.com"
|
||||
- "+.steamcontent.com"
|
||||
- "+.srv.nintendo.net"
|
||||
- "*.n.n.srv.nintendo.net"
|
||||
- "+.cdn.nintendo.net"
|
||||
- "xbox.*.*.microsoft.com"
|
||||
- "*.*.xboxlive.com"
|
||||
- "xbox.*.microsoft.com"
|
||||
- "xnotify.xboxlive.com"
|
||||
- "+.battle.net"
|
||||
- "+.battlenet.com.cn"
|
||||
- "+.wotgame.cn"
|
||||
- "+.wggames.cn"
|
||||
- "+.wowsgame.cn"
|
||||
- "+.wargaming.net"
|
||||
- "proxy.golang.org"
|
||||
- "+.stun.*.*"
|
||||
- "+.stun.*.*.*"
|
||||
- "+.stun.*.*.*.*"
|
||||
- "+.stun.*.*.*.*.*"
|
||||
- "heartbeat.belkin.com"
|
||||
- "*.linksys.com"
|
||||
- "*.linksyssmartwifi.com"
|
||||
- "*.router.asus.com"
|
||||
- "mesu.apple.com"
|
||||
- "swscan.apple.com"
|
||||
- "swquery.apple.com"
|
||||
- "swdownload.apple.com"
|
||||
- "swcdn.apple.com"
|
||||
- "swdist.apple.com"
|
||||
- "lens.l.google.com"
|
||||
- "na.b.g-tun.com"
|
||||
- "+.nflxvideo.net"
|
||||
- "*.square-enix.com"
|
||||
- "*.finalfantasyxiv.com"
|
||||
- "*.ffxiv.com"
|
||||
- "*.ff14.sdo.com"
|
||||
- "ff.dorado.sdo.com"
|
||||
- "*.mcdn.bilivideo.cn"
|
||||
- "+.media.dssott.com"
|
||||
- "shark007.net"
|
||||
- "Mijia Cloud"
|
||||
- "+.market.xiaomi.com"
|
||||
- "+.cmbchina.com"
|
||||
- "+.cmbimg.com"
|
||||
- "adguardteam.github.io"
|
||||
- "adrules.top"
|
||||
- "anti-ad.net"
|
||||
- "local.adguard.org"
|
||||
- "static.adtidy.org"
|
||||
- "+.sandai.net"
|
||||
- "+.n0808.com"
|
||||
- "+.3gppnetwork.org"
|
||||
- "+.uu.163.com"
|
||||
- "ps.res.netease.com"
|
||||
- "+.pub.3gppnetwork.org"
|
||||
- "+.oray.com"
|
||||
- "+.orayimg.com"
|
||||
- "+.gcloudcs.com"
|
||||
- "+.gcloudsdk.com"
|
||||
- "+.instant.arubanetworks.com"
|
||||
- "+.setmeup.arubanetworks.com"
|
||||
- "+.router.asus.com"
|
||||
- "+.www.asusrouter.com"
|
||||
- "+.hiwifi.com"
|
||||
- "+.leike.cc"
|
||||
- "+.miwifi.com"
|
||||
- "+.my.router"
|
||||
- "+.p.to"
|
||||
- "+.peiluyou.com"
|
||||
- "+.phicomm.me"
|
||||
- "+.router.ctc"
|
||||
- "+.routerlogin.com"
|
||||
- "+.tendawifi.com"
|
||||
- "+.zte.home"
|
||||
- "+.tplogin.cn"
|
||||
- "+.wifi.cmcc"
|
||||
tun:
|
||||
enable: true
|
||||
stack: system
|
||||
device: mochen
|
||||
auto-route: true
|
||||
endpoint-independent-nat: true
|
||||
auto-detect-interface: true
|
||||
endpoint-independents-hijack:
|
||||
- any:53
|
||||
- tcp://any:53
|
||||
strict-route: false
|
||||
mtu: 1500
|
||||
udp-timeout: 120
|
||||
proxies: []
|
||||
|
||||
proxy-groups:
|
||||
- name: 🚀 默认代理
|
||||
type: select
|
||||
proxies:
|
||||
- ♻️ 自动选择
|
||||
- 🔯 故障转移
|
||||
- 🔮 负载均衡
|
||||
|
||||
- name: 🎮 游戏
|
||||
type: select
|
||||
proxies: []
|
||||
|
||||
- name: 🎮 steam
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
- DIRECT
|
||||
|
||||
- name: 📹 YouTube
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 🍀 Google
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 📺 Bilibili
|
||||
type: select
|
||||
proxies:
|
||||
- DIRECT
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 🤖 ChatGPT
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 👨🏿💻 GitHub
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 🐬 OneDrive
|
||||
type: select
|
||||
proxies:
|
||||
- DIRECT
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 🪟 Microsoft
|
||||
type: select
|
||||
proxies:
|
||||
- DIRECT
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 🎵 TikTok
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 📲 Telegram
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 🎥 NETFLIX
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: ✈️ Speedtest
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
- DIRECT
|
||||
|
||||
- name: 💶 PayPal
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 🍎 Apple
|
||||
type: select
|
||||
proxies:
|
||||
- DIRECT
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 🐟 漏网之鱼
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
- DIRECT
|
||||
|
||||
- name: 🌏 国内网站
|
||||
type: select
|
||||
proxies:
|
||||
- DIRECT
|
||||
- 🚀 默认代理
|
||||
|
||||
- name: ♻️ 自动选择
|
||||
type: url-test
|
||||
url: http://cp.cloudflare.com/
|
||||
interval: 300
|
||||
tolerance: 50
|
||||
timeout: 300
|
||||
max-failed-times: 3
|
||||
proxies: []
|
||||
|
||||
- name: 🔯 故障转移
|
||||
type: fallback
|
||||
url: http://cp.cloudflare.com/
|
||||
interval: 300
|
||||
tolerance: 50
|
||||
timeout: 300
|
||||
max-failed-times: 3
|
||||
proxies: []
|
||||
|
||||
- name: 🔮 负载均衡
|
||||
type: load-balance
|
||||
strategy: consistent-hashing
|
||||
url: http://cp.cloudflare.com/
|
||||
interval: 300
|
||||
tolerance: 50
|
||||
timeout: 300
|
||||
max-failed-times: 3
|
||||
proxies: []
|
||||
|
||||
rules:
|
||||
- GEOSITE,category-ads-all,REJECT
|
||||
- DOMAIN,instant.arubanetworks.com,DIRECT
|
||||
- DOMAIN,setmeup.arubanetworks.com,DIRECT
|
||||
- DOMAIN,router.asus.com,DIRECT
|
||||
- DOMAIN,www.asusrouter.com,DIRECT
|
||||
- DOMAIN-SUFFIX,hiwifi.com,DIRECT
|
||||
- DOMAIN-SUFFIX,leike.cc,DIRECT
|
||||
- DOMAIN-SUFFIX,miwifi.com,DIRECT
|
||||
- DOMAIN-SUFFIX,my.router,DIRECT
|
||||
- DOMAIN-SUFFIX,p.to,DIRECT
|
||||
- DOMAIN-SUFFIX,peiluyou.com,DIRECT
|
||||
- DOMAIN-SUFFIX,phicomm.me,DIRECT
|
||||
- DOMAIN-SUFFIX,router.ctc,DIRECT
|
||||
- DOMAIN-SUFFIX,routerlogin.com,DIRECT
|
||||
- DOMAIN-SUFFIX,tendawifi.com,DIRECT
|
||||
- DOMAIN-SUFFIX,zte.home,DIRECT
|
||||
- DOMAIN-SUFFIX,tplogin.cn,DIRECT
|
||||
- DOMAIN-SUFFIX,wifi.cmcc,DIRECT
|
||||
- DOMAIN-SUFFIX,bilibili.com, 📺 Bilibili
|
||||
- GEOSITE,bilibili, 📺 Bilibili
|
||||
- GEOSITE,biliintl, 📺 Bilibili
|
||||
- DOMAIN,ipinfo.littlediary.cn, 🚀 默认代理
|
||||
- DOMAIN,console.cloudyun.top, 🚀 默认代理
|
||||
- DOMAIN,s3.cloudyun.top, 🚀 默认代理
|
||||
- DOMAIN-SUFFIX,browserleaks.com, 🚀 默认代理
|
||||
- DOMAIN-SUFFIX,ping.pe,🚀 默认代理
|
||||
- DOMAIN-SUFFIX,dgameglobal.com,🎮 游戏
|
||||
- DOMAIN-SUFFIX,wilds.monsterhunter.com,🎮 游戏
|
||||
- DOMAIN-SUFFIX,capcom.com,🎮 游戏
|
||||
- DOMAIN-SUFFIX,playfabapi.com,🎮 游戏
|
||||
- DOMAIN-SUFFIX,playfab.com,🎮 游戏
|
||||
- DOMAIN-SUFFIX,akamai.net,🎮 游戏
|
||||
- DOMAIN-SUFFIX,cloudapp.azure.com,🎮 游戏
|
||||
- PROCESS-NAME,CrashReport.exe,🎮 游戏
|
||||
- PROCESS-NAME,InstallerMessage.exe,🎮 游戏
|
||||
- PROCESS-NAME,MonsterHunterWilds.exe,🎮 游戏
|
||||
- PROCESS-NAME,SGuard64.exe,🎮 游戏
|
||||
- PROCESS-NAME,SGuardSvc64.exe,🎮 游戏
|
||||
- PROCESS-NAME,SGuardUpdate64.exe,🎮 游戏
|
||||
- PROCESS-NAME,Uninstall64.exe,🎮 游戏
|
||||
- PROCESS-NAME,ACE-Service64.exe,🎮 游戏
|
||||
- PROCESS-NAME,ACE-Setup64.exe,🎮 游戏
|
||||
- PROCESS-NAME,GeckoParser.exe,🎮 游戏
|
||||
- PROCESS-NAME,MetaperfCapturer.exe,🎮 游戏
|
||||
- PROCESS-NAME,profiler-symbol-server.exe,🎮 游戏
|
||||
- PROCESS-NAME,DownSysSymCache.exe,🎮 游戏
|
||||
- PROCESS-NAME,dumpbin.exe,🎮 游戏
|
||||
- PROCESS-NAME,Link.exe,🎮 游戏
|
||||
- PROCESS-NAME,SymCacheGen.exe,🎮 游戏
|
||||
- PROCESS-NAME,SymChk.exe,🎮 游戏
|
||||
- PROCESS-NAME,WevtUtil.exe,🎮 游戏
|
||||
- PROCESS-NAME,XPerf.exe,🎮 游戏
|
||||
- PROCESS-NAME,DeltaForceClient-Win64-Shipping.exe,🎮 游戏
|
||||
- PROCESS-NAME,INTLWebViewHelper.exe,🎮 游戏
|
||||
- PROCESS-NAME,pfbs.exe,🎮 游戏
|
||||
- PROCESS-NAME,UnrealCEFSubProcess.exe,🎮 游戏
|
||||
- PROCESS-NAME,UE4PrereqSetup_x64.exe,🎮 游戏
|
||||
- PROCESS-NAME,DeltaForceClient.exe,🎮 游戏
|
||||
- PROCESS-NAME,EAAntiCheat.Installer.exe,🎮 游戏
|
||||
- PROCESS-NAME,bf6.exe,🎮 游戏
|
||||
- PROCESS-NAME,bf6.exe,🎮 游戏
|
||||
- PROCESS-NAME,EAAntiCheat.GameServiceLauncher.exe,🎮 游戏
|
||||
- PROCESS-NAME,EAAntiCheat.GameService.exe,🎮 游戏
|
||||
- DOMAIN-SUFFIX,eaanticheat.ac.ea.com,🎮 游戏
|
||||
- GEOSITE,steam@cn,🌏 国内网站
|
||||
- GEOSITE,steam,🎮 steam
|
||||
- GEOSITE,apple,🍎 Apple
|
||||
- GEOSITE,private,🌏 国内网站
|
||||
- GEOSITE,openai,🤖 ChatGPT
|
||||
- GEOSITE,google-gemini,🤖 ChatGPT
|
||||
- GEOSITE,github,👨🏿💻 GitHub
|
||||
- GEOSITE,onedrive,🐬 OneDrive
|
||||
- GEOSITE,microsoft,🪟 Microsoft
|
||||
- GEOSITE,youtube,📹 YouTube
|
||||
- GEOSITE,google,🍀 Google
|
||||
- GEOSITE,tiktok,🎵 TikTok
|
||||
- GEOSITE,speedtest,✈️ Speedtest
|
||||
- GEOSITE,telegram,📲 Telegram
|
||||
- GEOSITE,netflix,🎥 NETFLIX
|
||||
- GEOSITE,paypal,💶 PayPal
|
||||
- GEOSITE,gfw,🚀 默认代理
|
||||
- GEOSITE,category-dev,🚀 默认代理
|
||||
- DOMAIN-SUFFIX,cloudflare-dns.com,🚀 默认代理
|
||||
- DOMAIN-SUFFIX,api.nn.ci,🚀 默认代理
|
||||
- DOMAIN-SUFFIX,api.ipify.org,🚀 默认代理
|
||||
- DOMAIN-SUFFIX,gsas.apple.com,🚀 默认代理
|
||||
- DOMAIN-SUFFIX,hotmail.com,🚀 默认代理
|
||||
- GEOSITE,CN,🌏 国内网站
|
||||
- GEOIP,private,🌏 国内网站,no-resolve
|
||||
- IP-CIDR,1.0.0.1/32,🚀 默认代理,no-resolve
|
||||
- IP-CIDR,1.1.1.1/32,🚀 默认代理,no-resolve
|
||||
- IP-CIDR,8.8.8.8/32,🚀 默认代理,no-resolve
|
||||
- IP-CIDR,8.8.4.4/32,🚀 默认代理,no-resolve
|
||||
- GEOIP,google,🍀 Google
|
||||
- GEOIP,netflix,🎥 NETFLIX
|
||||
- GEOIP,telegram,📲 Telegram
|
||||
- GEOIP,CN,🌏 国内网站
|
||||
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
|
||||
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
|
||||
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
|
||||
- IP-CIDR,100.64.0.0/10,DIRECT,no-resolve
|
||||
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
|
||||
- IP-CIDR,198.18.0.0/16,DIRECT,no-resolve
|
||||
- IP-CIDR,224.0.0.0/4,DIRECT,no-resolve
|
||||
- IP-CIDR6,::1/128,DIRECT,no-resolve
|
||||
- IP-CIDR6,fc00::/7,DIRECT,no-resolve
|
||||
- IP-CIDR6,fe80::/10,DIRECT,no-resolve
|
||||
- IP-CIDR6,fd00::/8,DIRECT,no-resolve
|
||||
- MATCH,🐟 漏网之鱼
|
||||
493
submodule/clash.yaml
Normal file
493
submodule/clash.yaml
Normal file
@@ -0,0 +1,493 @@
|
||||
port: 7890
|
||||
socks-port: 7891
|
||||
allow-lan: true
|
||||
ipv6: true
|
||||
bind-address: "*"
|
||||
mode: Rule
|
||||
log-level: info
|
||||
external-controller: 127.0.0.1:9090
|
||||
tcp-concurrent: true
|
||||
find-process-mode: strict
|
||||
geodata-mode: true #【Meta专属】使用geoip.dat数据库(默认:false使用mmdb数据库)
|
||||
geodata-loader: standard
|
||||
geo-auto-update: true
|
||||
geo-update-interval: 24
|
||||
geox-url:
|
||||
geoip: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat"
|
||||
geosite: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat"
|
||||
mmdb: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.metadb"
|
||||
asn: "https://github.com/xishang0128/geoip/releases/download/latest/GeoLite2-ASN.mmdb"
|
||||
experimental:
|
||||
ignore-resolve-fail: true
|
||||
dns:
|
||||
enable: true
|
||||
listen: 1053
|
||||
ipv6: false
|
||||
default-nameserver:
|
||||
- 1.1.1.1
|
||||
- 8.8.8.8
|
||||
nameserver:
|
||||
- https://1.1.1.1/dns-query # Cloudflare(支持 H3)
|
||||
- https://dns.google/dns-query # Google(支持 H3)
|
||||
- 1.1.1.1 # Cloudflare Public DNS (UDP)
|
||||
- 8.8.8.8 # Google Public DNS (UDP)
|
||||
proxy-server-nameserver:
|
||||
- https://doh.pub/dns-query
|
||||
- 223.5.5.5
|
||||
nameserver-policy:
|
||||
"geosite:cn,private": # 国内域名和私有域名强制走国内 DNS
|
||||
- https://223.5.5.5/dns-query # 阿里
|
||||
- https://doh.pub/dns-query # 腾讯
|
||||
- 223.5.5.5 # 阿里 UDP
|
||||
- 119.29.29.29 # 腾讯 UDP
|
||||
"geo:cn": # 也可以用 geo:cn 匹配 IP
|
||||
- https://223.5.5.5/dns-query
|
||||
- https://doh.pub/dns-query
|
||||
- 223.5.5.5 # 阿里 UDP
|
||||
- 119.29.29.29 # 腾讯 UDP
|
||||
"geosite:gfw": # 新增:GFW 列表域名强制走国外 DNS
|
||||
- https://cloudflare-dns.com/dns-query
|
||||
- https://dns.google/dns-query
|
||||
- 1.1.1.1
|
||||
- 8.8.8.8
|
||||
"geosite:geolocation-!cn": # 新增:非中国大陆域名强制走国外 DNS
|
||||
- https://cloudflare-dns.com/dns-query
|
||||
- https://dns.google/dns-query
|
||||
- 1.1.1.1
|
||||
- 8.8.8.8
|
||||
"full-nameserver": # 新增:最终兜底,所有未匹配的域名查询强制走国外 DNS
|
||||
- https://cloudflare-dns.com/dns-query
|
||||
- https://dns.google/dns-query
|
||||
- 1.1.1.1
|
||||
- 8.8.8.8
|
||||
fallback:
|
||||
- tls://8.8.4.4
|
||||
- tls://1.1.1.1
|
||||
fallback-filter:
|
||||
geoip: true
|
||||
geoip-code: CN
|
||||
geosite:
|
||||
- gfw
|
||||
ipcidr:
|
||||
- 240.0.0.0/4
|
||||
domain:
|
||||
- +.google.com
|
||||
- +.facebook.com
|
||||
- +.youtube.com
|
||||
- +.githubusercontent.com
|
||||
- +.googlevideo.com
|
||||
- +.msftconnecttest.com
|
||||
- +.msftncsi.com
|
||||
- msftconnecttest.com
|
||||
- msftncsi.com
|
||||
enhanced-mode: fake-ip
|
||||
fake-ip-range: 198.18.0.1/16
|
||||
fake-ip-filter-mode: blacklist
|
||||
fake-ip-filter:
|
||||
- "*.lan"
|
||||
- "*.localdomain"
|
||||
- "*.example"
|
||||
- "*.invalid"
|
||||
- "*.localhost"
|
||||
- "*.test"
|
||||
- "*.local"
|
||||
- "*.home.arpa"
|
||||
- "*.direct"
|
||||
- "*.orb.local"
|
||||
- "*.ip6-localhost"
|
||||
- "*.ip6-loopback"
|
||||
- "time.*.com"
|
||||
- "time.*.gov"
|
||||
- "time.*.edu.cn"
|
||||
- "time.*.apple.com"
|
||||
- "time-ios.apple.com"
|
||||
- "time1.*.com"
|
||||
- "time2.*.com"
|
||||
- "time3.*.com"
|
||||
- "time4.*.com"
|
||||
- "time5.*.com"
|
||||
- "time6.*.com"
|
||||
- "time7.*.com"
|
||||
- "ntp.*.com"
|
||||
- "ntp1.*.com"
|
||||
- "ntp2.*.com"
|
||||
- "ntp3.*.com"
|
||||
- "ntp4.*.com"
|
||||
- "ntp5.*.com"
|
||||
- "ntp6.*.com"
|
||||
- "ntp7.*.com"
|
||||
- "*.time.edu.cn"
|
||||
- "*.ntp.org.cn"
|
||||
- "+.pool.ntp.org"
|
||||
- "time1.cloud.tencent.com"
|
||||
- "music.163.com"
|
||||
- "*.music.163.com"
|
||||
- "*.126.net"
|
||||
- "musicapi.taihe.com"
|
||||
- "music.taihe.com"
|
||||
- "songsearch.kugou.com"
|
||||
- "trackercdn.kugou.com"
|
||||
- "*.kuwo.cn"
|
||||
- "api-jooxtt.sanook.com"
|
||||
- "api.joox.com"
|
||||
- "joox.com"
|
||||
- "y.qq.com"
|
||||
- "*.y.qq.com"
|
||||
- "streamoc.music.tc.qq.com"
|
||||
- "mobileoc.music.tc.qq.com"
|
||||
- "isure.stream.qqmusic.qq.com"
|
||||
- "dl.stream.qqmusic.qq.com"
|
||||
- "aqqmusic.tc.qq.com"
|
||||
- "amobile.music.tc.qq.com"
|
||||
- "*.xiami.com"
|
||||
- "*.music.migu.cn"
|
||||
- "music.migu.cn"
|
||||
- "+.msftconnecttest.com"
|
||||
- "+.msftncsi.com"
|
||||
- "localhost.ptlogin2.qq.com"
|
||||
- "localhost.sec.qq.com"
|
||||
- "localhost.*.weixin.qq.com"
|
||||
- "+.steamcontent.com"
|
||||
- "+.srv.nintendo.net"
|
||||
- "*.n.n.srv.nintendo.net"
|
||||
- "+.cdn.nintendo.net"
|
||||
- "xbox.*.*.microsoft.com"
|
||||
- "*.*.xboxlive.com"
|
||||
- "xbox.*.microsoft.com"
|
||||
- "xnotify.xboxlive.com"
|
||||
- "+.battle.net"
|
||||
- "+.battlenet.com.cn"
|
||||
- "+.wotgame.cn"
|
||||
- "+.wggames.cn"
|
||||
- "+.wowsgame.cn"
|
||||
- "+.wargaming.net"
|
||||
- "proxy.golang.org"
|
||||
- "+.stun.*.*"
|
||||
- "+.stun.*.*.*"
|
||||
- "+.stun.*.*.*.*"
|
||||
- "+.stun.*.*.*.*.*"
|
||||
- "heartbeat.belkin.com"
|
||||
- "*.linksys.com"
|
||||
- "*.linksyssmartwifi.com"
|
||||
- "*.router.asus.com"
|
||||
- "mesu.apple.com"
|
||||
- "swscan.apple.com"
|
||||
- "swquery.apple.com"
|
||||
- "swdownload.apple.com"
|
||||
- "swcdn.apple.com"
|
||||
- "swdist.apple.com"
|
||||
- "lens.l.google.com"
|
||||
- "na.b.g-tun.com"
|
||||
- "+.nflxvideo.net"
|
||||
- "*.square-enix.com"
|
||||
- "*.finalfantasyxiv.com"
|
||||
- "*.ffxiv.com"
|
||||
- "*.ff14.sdo.com"
|
||||
- "ff.dorado.sdo.com"
|
||||
- "*.mcdn.bilivideo.cn"
|
||||
- "+.media.dssott.com"
|
||||
- "shark007.net"
|
||||
- "Mijia Cloud"
|
||||
- "+.market.xiaomi.com"
|
||||
- "+.cmbchina.com"
|
||||
- "+.cmbimg.com"
|
||||
- "adguardteam.github.io"
|
||||
- "adrules.top"
|
||||
- "anti-ad.net"
|
||||
- "local.adguard.org"
|
||||
- "static.adtidy.org"
|
||||
- "+.sandai.net"
|
||||
- "+.n0808.com"
|
||||
- "+.3gppnetwork.org"
|
||||
- "+.uu.163.com"
|
||||
- "ps.res.netease.com"
|
||||
- "+.pub.3gppnetwork.org"
|
||||
- "+.oray.com"
|
||||
- "+.orayimg.com"
|
||||
- "+.gcloudcs.com"
|
||||
- "+.gcloudsdk.com"
|
||||
- "+.instant.arubanetworks.com"
|
||||
- "+.setmeup.arubanetworks.com"
|
||||
- "+.router.asus.com"
|
||||
- "+.www.asusrouter.com"
|
||||
- "+.hiwifi.com"
|
||||
- "+.leike.cc"
|
||||
- "+.miwifi.com"
|
||||
- "+.my.router"
|
||||
- "+.p.to"
|
||||
- "+.peiluyou.com"
|
||||
- "+.phicomm.me"
|
||||
- "+.router.ctc"
|
||||
- "+.routerlogin.com"
|
||||
- "+.tendawifi.com"
|
||||
- "+.zte.home"
|
||||
- "+.tplogin.cn"
|
||||
- "+.wifi.cmcc"
|
||||
tun:
|
||||
enable: true
|
||||
stack: system
|
||||
device: mochen
|
||||
auto-route: true
|
||||
endpoint-independent-nat: true
|
||||
auto-detect-interface: true
|
||||
endpoint-independents-hijack:
|
||||
- any:53
|
||||
- tcp://any:53
|
||||
strict-route: false
|
||||
mtu: 1500
|
||||
udp-timeout: 120
|
||||
proxies: []
|
||||
|
||||
proxy-groups:
|
||||
- name: 🚀 默认代理
|
||||
type: select
|
||||
proxies:
|
||||
- ♻️ 自动选择
|
||||
- 🔯 故障转移
|
||||
- 🔮 负载均衡
|
||||
|
||||
- name: 🎮 游戏
|
||||
type: select
|
||||
proxies: []
|
||||
|
||||
- name: 🎮 steam
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
- DIRECT
|
||||
|
||||
- name: 📹 YouTube
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 🍀 Google
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 📺 Bilibili
|
||||
type: select
|
||||
proxies:
|
||||
- DIRECT
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 🤖 ChatGPT
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 👨🏿💻 GitHub
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 🐬 OneDrive
|
||||
type: select
|
||||
proxies:
|
||||
- DIRECT
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 🪟 Microsoft
|
||||
type: select
|
||||
proxies:
|
||||
- DIRECT
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 🎵 TikTok
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 📲 Telegram
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 🎥 NETFLIX
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: ✈️ Speedtest
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
- DIRECT
|
||||
|
||||
- name: 💶 PayPal
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 🍎 Apple
|
||||
type: select
|
||||
proxies:
|
||||
- DIRECT
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 🐟 漏网之鱼
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
- DIRECT
|
||||
|
||||
- name: 🌏 国内网站
|
||||
type: select
|
||||
proxies:
|
||||
- DIRECT
|
||||
- 🚀 默认代理
|
||||
|
||||
- name: ♻️ 自动选择
|
||||
type: url-test
|
||||
url: http://cp.cloudflare.com/
|
||||
interval: 300
|
||||
tolerance: 50
|
||||
timeout: 300
|
||||
max-failed-times: 3
|
||||
proxies: []
|
||||
|
||||
- name: 🔯 故障转移
|
||||
type: fallback
|
||||
url: http://cp.cloudflare.com/
|
||||
interval: 300
|
||||
tolerance: 50
|
||||
timeout: 300
|
||||
max-failed-times: 3
|
||||
proxies: []
|
||||
|
||||
- name: 🔮 负载均衡
|
||||
type: load-balance
|
||||
strategy: consistent-hashing
|
||||
url: http://cp.cloudflare.com/
|
||||
interval: 300
|
||||
tolerance: 50
|
||||
timeout: 300
|
||||
max-failed-times: 3
|
||||
proxies: []
|
||||
|
||||
rules:
|
||||
- GEOSITE,category-ads-all,REJECT
|
||||
- DOMAIN,instant.arubanetworks.com,DIRECT
|
||||
- DOMAIN,setmeup.arubanetworks.com,DIRECT
|
||||
- DOMAIN,router.asus.com,DIRECT
|
||||
- DOMAIN,www.asusrouter.com,DIRECT
|
||||
- DOMAIN-SUFFIX,hiwifi.com,DIRECT
|
||||
- DOMAIN-SUFFIX,leike.cc,DIRECT
|
||||
- DOMAIN-SUFFIX,miwifi.com,DIRECT
|
||||
- DOMAIN-SUFFIX,my.router,DIRECT
|
||||
- DOMAIN-SUFFIX,p.to,DIRECT
|
||||
- DOMAIN-SUFFIX,peiluyou.com,DIRECT
|
||||
- DOMAIN-SUFFIX,phicomm.me,DIRECT
|
||||
- DOMAIN-SUFFIX,router.ctc,DIRECT
|
||||
- DOMAIN-SUFFIX,routerlogin.com,DIRECT
|
||||
- DOMAIN-SUFFIX,tendawifi.com,DIRECT
|
||||
- DOMAIN-SUFFIX,zte.home,DIRECT
|
||||
- DOMAIN-SUFFIX,tplogin.cn,DIRECT
|
||||
- DOMAIN-SUFFIX,wifi.cmcc,DIRECT
|
||||
- DOMAIN-SUFFIX,bilibili.com, 📺 Bilibili
|
||||
- GEOSITE,bilibili, 📺 Bilibili
|
||||
- GEOSITE,biliintl, 📺 Bilibili
|
||||
- DOMAIN,ipinfo.littlediary.cn, 🚀 默认代理
|
||||
- DOMAIN,console.cloudyun.top, 🚀 默认代理
|
||||
- DOMAIN,s3.cloudyun.top, 🚀 默认代理
|
||||
- DOMAIN-SUFFIX,browserleaks.com, 🚀 默认代理
|
||||
- DOMAIN-SUFFIX,ping.pe,🚀 默认代理
|
||||
- DOMAIN-SUFFIX,dgameglobal.com,🎮 游戏
|
||||
- DOMAIN-SUFFIX,wilds.monsterhunter.com,🎮 游戏
|
||||
- DOMAIN-SUFFIX,capcom.com,🎮 游戏
|
||||
- DOMAIN-SUFFIX,playfabapi.com,🎮 游戏
|
||||
- DOMAIN-SUFFIX,playfab.com,🎮 游戏
|
||||
- DOMAIN-SUFFIX,akamai.net,🎮 游戏
|
||||
- DOMAIN-SUFFIX,cloudapp.azure.com,🎮 游戏
|
||||
- PROCESS-NAME,CrashReport.exe,🎮 游戏
|
||||
- PROCESS-NAME,InstallerMessage.exe,🎮 游戏
|
||||
- PROCESS-NAME,MonsterHunterWilds.exe,🎮 游戏
|
||||
- PROCESS-NAME,SGuard64.exe,🎮 游戏
|
||||
- PROCESS-NAME,SGuardSvc64.exe,🎮 游戏
|
||||
- PROCESS-NAME,SGuardUpdate64.exe,🎮 游戏
|
||||
- PROCESS-NAME,Uninstall64.exe,🎮 游戏
|
||||
- PROCESS-NAME,ACE-Service64.exe,🎮 游戏
|
||||
- PROCESS-NAME,ACE-Setup64.exe,🎮 游戏
|
||||
- PROCESS-NAME,GeckoParser.exe,🎮 游戏
|
||||
- PROCESS-NAME,MetaperfCapturer.exe,🎮 游戏
|
||||
- PROCESS-NAME,profiler-symbol-server.exe,🎮 游戏
|
||||
- PROCESS-NAME,DownSysSymCache.exe,🎮 游戏
|
||||
- PROCESS-NAME,dumpbin.exe,🎮 游戏
|
||||
- PROCESS-NAME,Link.exe,🎮 游戏
|
||||
- PROCESS-NAME,SymCacheGen.exe,🎮 游戏
|
||||
- PROCESS-NAME,SymChk.exe,🎮 游戏
|
||||
- PROCESS-NAME,WevtUtil.exe,🎮 游戏
|
||||
- PROCESS-NAME,XPerf.exe,🎮 游戏
|
||||
- PROCESS-NAME,DeltaForceClient-Win64-Shipping.exe,🎮 游戏
|
||||
- PROCESS-NAME,INTLWebViewHelper.exe,🎮 游戏
|
||||
- PROCESS-NAME,pfbs.exe,🎮 游戏
|
||||
- PROCESS-NAME,UnrealCEFSubProcess.exe,🎮 游戏
|
||||
- PROCESS-NAME,UE4PrereqSetup_x64.exe,🎮 游戏
|
||||
- PROCESS-NAME,DeltaForceClient.exe,🎮 游戏
|
||||
- PROCESS-NAME,EAAntiCheat.Installer.exe,🎮 游戏
|
||||
- PROCESS-NAME,bf6.exe,🎮 游戏
|
||||
- PROCESS-NAME,bf6.exe,🎮 游戏
|
||||
- PROCESS-NAME,EAAntiCheat.GameServiceLauncher.exe,🎮 游戏
|
||||
- PROCESS-NAME,EAAntiCheat.GameService.exe,🎮 游戏
|
||||
- DOMAIN-SUFFIX,eaanticheat.ac.ea.com,🎮 游戏
|
||||
- GEOSITE,steam@cn,🌏 国内网站
|
||||
- GEOSITE,steam,🎮 steam
|
||||
- GEOSITE,apple,🍎 Apple
|
||||
- GEOSITE,private,🌏 国内网站
|
||||
- GEOSITE,openai,🤖 ChatGPT
|
||||
- GEOSITE,google-gemini,🤖 ChatGPT
|
||||
- GEOSITE,github,👨🏿💻 GitHub
|
||||
- GEOSITE,onedrive,🐬 OneDrive
|
||||
- GEOSITE,microsoft,🪟 Microsoft
|
||||
- GEOSITE,youtube,📹 YouTube
|
||||
- GEOSITE,google,🍀 Google
|
||||
- GEOSITE,tiktok,🎵 TikTok
|
||||
- GEOSITE,speedtest,✈️ Speedtest
|
||||
- GEOSITE,telegram,📲 Telegram
|
||||
- GEOSITE,netflix,🎥 NETFLIX
|
||||
- GEOSITE,paypal,💶 PayPal
|
||||
- GEOSITE,gfw,🚀 默认代理
|
||||
- GEOSITE,category-dev,🚀 默认代理
|
||||
- DOMAIN-SUFFIX,cloudflare-dns.com,🚀 默认代理
|
||||
- DOMAIN-SUFFIX,api.nn.ci,🚀 默认代理
|
||||
- DOMAIN-SUFFIX,api.ipify.org,🚀 默认代理
|
||||
- DOMAIN-SUFFIX,gsas.apple.com,🚀 默认代理
|
||||
- DOMAIN-SUFFIX,hotmail.com,🚀 默认代理
|
||||
- GEOSITE,CN,🌏 国内网站
|
||||
- GEOIP,private,🌏 国内网站,no-resolve
|
||||
- IP-CIDR,1.0.0.1/32,🚀 默认代理,no-resolve
|
||||
- IP-CIDR,1.1.1.1/32,🚀 默认代理,no-resolve
|
||||
- IP-CIDR,8.8.8.8/32,🚀 默认代理,no-resolve
|
||||
- IP-CIDR,8.8.4.4/32,🚀 默认代理,no-resolve
|
||||
- GEOIP,google,🍀 Google
|
||||
- GEOIP,netflix,🎥 NETFLIX
|
||||
- GEOIP,telegram,📲 Telegram
|
||||
- GEOIP,CN,🌏 国内网站
|
||||
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
|
||||
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
|
||||
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
|
||||
- IP-CIDR,100.64.0.0/10,DIRECT,no-resolve
|
||||
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
|
||||
- IP-CIDR,198.18.0.0/16,DIRECT,no-resolve
|
||||
- IP-CIDR,224.0.0.0/4,DIRECT,no-resolve
|
||||
- IP-CIDR6,::1/128,DIRECT,no-resolve
|
||||
- IP-CIDR6,fc00::/7,DIRECT,no-resolve
|
||||
- IP-CIDR6,fe80::/10,DIRECT,no-resolve
|
||||
- IP-CIDR6,fd00::/8,DIRECT,no-resolve
|
||||
- MATCH,🐟 漏网之鱼
|
||||
159
submodule/singbox.json
Normal file
159
submodule/singbox.json
Normal file
@@ -0,0 +1,159 @@
|
||||
{
|
||||
"dns": {
|
||||
"rules": [
|
||||
{
|
||||
"outbound": [
|
||||
"any"
|
||||
],
|
||||
"server": "local"
|
||||
},
|
||||
{
|
||||
"clash_mode": "global",
|
||||
"server": "remote"
|
||||
},
|
||||
{
|
||||
"clash_mode": "direct",
|
||||
"server": "local"
|
||||
},
|
||||
{
|
||||
"rule_set": [
|
||||
"geosite-cn"
|
||||
],
|
||||
"server": "local"
|
||||
}
|
||||
],
|
||||
"servers": [
|
||||
{
|
||||
"address": "https://1.1.1.1/dns-query",
|
||||
"detour": "节点选择",
|
||||
"tag": "remote"
|
||||
},
|
||||
{
|
||||
"address": "https://223.5.5.5/dns-query",
|
||||
"detour": "direct",
|
||||
"tag": "local"
|
||||
},
|
||||
{
|
||||
"address": "rcode://success",
|
||||
"tag": "block"
|
||||
}
|
||||
],
|
||||
"strategy": "prefer_ipv4"
|
||||
},
|
||||
"experimental": {
|
||||
"cache_file": {
|
||||
"enabled": true,
|
||||
"path": "cache.db",
|
||||
"cache_id": "cache_db",
|
||||
"store_fakeip": true
|
||||
}
|
||||
},
|
||||
"inbounds": [
|
||||
{
|
||||
"auto_route": true,
|
||||
"domain_strategy": "prefer_ipv4",
|
||||
"endpoint_independent_nat": true,
|
||||
"address": [
|
||||
"172.19.0.1/30",
|
||||
"2001:0470:f9da:fdfa::1/64"
|
||||
],
|
||||
"mtu": 9000,
|
||||
"sniff": true,
|
||||
"sniff_override_destination": true,
|
||||
"stack": "system",
|
||||
"strict_route": true,
|
||||
"type": "tun"
|
||||
},
|
||||
{
|
||||
"domain_strategy": "prefer_ipv4",
|
||||
"listen": "127.0.0.1",
|
||||
"listen_port": 2333,
|
||||
"sniff": true,
|
||||
"sniff_override_destination": true,
|
||||
"tag": "socks-in",
|
||||
"type": "socks",
|
||||
"users": []
|
||||
},
|
||||
{
|
||||
"domain_strategy": "prefer_ipv4",
|
||||
"listen": "127.0.0.1",
|
||||
"listen_port": 2334,
|
||||
"sniff": true,
|
||||
"sniff_override_destination": true,
|
||||
"tag": "mixed-in",
|
||||
"type": "mixed",
|
||||
"users": []
|
||||
}
|
||||
],
|
||||
"outbounds": [
|
||||
{
|
||||
"tag": "节点选择",
|
||||
"type": "selector",
|
||||
"default": "自动选择",
|
||||
"outbounds": [
|
||||
"自动选择"
|
||||
]
|
||||
},
|
||||
{
|
||||
"tag": "direct",
|
||||
"type": "direct"
|
||||
},
|
||||
{
|
||||
"tag": "block",
|
||||
"type": "block"
|
||||
},
|
||||
{
|
||||
"tag": "dns-out",
|
||||
"type": "dns"
|
||||
},
|
||||
{
|
||||
"tag": "自动选择",
|
||||
"type": "urltest",
|
||||
"outbounds": []
|
||||
}
|
||||
],
|
||||
"route": {
|
||||
"auto_detect_interface": true,
|
||||
"rules": [
|
||||
{
|
||||
"outbound": "dns-out",
|
||||
"protocol": "dns"
|
||||
},
|
||||
{
|
||||
"clash_mode": "direct",
|
||||
"outbound": "direct"
|
||||
},
|
||||
{
|
||||
"clash_mode": "global",
|
||||
"outbound": "节点选择"
|
||||
},
|
||||
{
|
||||
"ip_is_private": true,
|
||||
"outbound": "direct"
|
||||
},
|
||||
{
|
||||
"rule_set": [
|
||||
"geosite-cn",
|
||||
"geoip-cn"
|
||||
],
|
||||
"outbound": "direct"
|
||||
}
|
||||
],
|
||||
"rule_set": [
|
||||
{
|
||||
"tag": "geosite-cn",
|
||||
"type": "remote",
|
||||
"format": "binary",
|
||||
"url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-cn.srs",
|
||||
"download_detour": "自动选择"
|
||||
},
|
||||
{
|
||||
"tag": "geoip-cn",
|
||||
"type": "remote",
|
||||
"format": "binary",
|
||||
"url": "https://raw.githubusercontent.com/SagerNet/sing-geoip/rule-set/geoip-cn.srs",
|
||||
"download_detour": "自动选择"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
491
submodule/stash.yaml
Normal file
491
submodule/stash.yaml
Normal file
@@ -0,0 +1,491 @@
|
||||
port: 7890
|
||||
socks-port: 7891
|
||||
allow-lan: true
|
||||
ipv6: true
|
||||
bind-address: "*"
|
||||
mode: Rule
|
||||
log-level: info
|
||||
external-controller: 127.0.0.1:9090
|
||||
tcp-concurrent: true
|
||||
find-process-mode: strict
|
||||
geodata-mode: true #【Meta专属】使用geoip.dat数据库(默认:false使用mmdb数据库)
|
||||
geodata-loader: standard
|
||||
geo-auto-update: true
|
||||
geo-update-interval: 24
|
||||
geox-url:
|
||||
geoip: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat"
|
||||
geosite: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat"
|
||||
mmdb: "https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.metadb"
|
||||
asn: "https://github.com/xishang0128/geoip/releases/download/latest/GeoLite2-ASN.mmdb"
|
||||
experimental:
|
||||
ignore-resolve-fail: true
|
||||
dns:
|
||||
enable: true
|
||||
listen: 1053
|
||||
ipv6: false
|
||||
default-nameserver:
|
||||
- 1.1.1.1
|
||||
- 8.8.8.8
|
||||
nameserver:
|
||||
- https://1.1.1.1/dns-query # Cloudflare(支持 H3)
|
||||
- https://dns.google/dns-query # Google(支持 H3)
|
||||
- 1.1.1.1 # Cloudflare Public DNS (UDP)
|
||||
- 8.8.8.8 # Google Public DNS (UDP)
|
||||
proxy-server-nameserver:
|
||||
- https://doh.pub/dns-query
|
||||
- 223.5.5.5
|
||||
nameserver-policy:
|
||||
"geosite:cn,private": # 国内域名和私有域名强制走国内 DNS
|
||||
- https://223.5.5.5/dns-query # 阿里
|
||||
- https://doh.pub/dns-query # 腾讯
|
||||
- 223.5.5.5 # 阿里 UDP
|
||||
- 119.29.29.29 # 腾讯 UDP
|
||||
"geo:cn": # 也可以用 geo:cn 匹配 IP
|
||||
- https://223.5.5.5/dns-query
|
||||
- https://doh.pub/dns-query
|
||||
- 223.5.5.5 # 阿里 UDP
|
||||
- 119.29.29.29 # 腾讯 UDP
|
||||
"geosite:gfw": # 新增:GFW 列表域名强制走国外 DNS
|
||||
- https://cloudflare-dns.com/dns-query
|
||||
- https://dns.google/dns-query
|
||||
- 1.1.1.1
|
||||
- 8.8.8.8
|
||||
"geosite:geolocation-!cn": # 新增:非中国大陆域名强制走国外 DNS
|
||||
- https://cloudflare-dns.com/dns-query
|
||||
- https://dns.google/dns-query
|
||||
- 1.1.1.1
|
||||
- 8.8.8.8
|
||||
"full-nameserver": # 新增:最终兜底,所有未匹配的域名查询强制走国外 DNS
|
||||
- https://cloudflare-dns.com/dns-query
|
||||
- https://dns.google/dns-query
|
||||
- 1.1.1.1
|
||||
- 8.8.8.8
|
||||
fallback:
|
||||
- tls://8.8.4.4
|
||||
- tls://1.1.1.1
|
||||
fallback-filter:
|
||||
geoip: true
|
||||
geoip-code: CN
|
||||
geosite:
|
||||
- gfw
|
||||
ipcidr:
|
||||
- 240.0.0.0/4
|
||||
domain:
|
||||
- +.google.com
|
||||
- +.facebook.com
|
||||
- +.youtube.com
|
||||
- +.githubusercontent.com
|
||||
- +.googlevideo.com
|
||||
- +.msftconnecttest.com
|
||||
- +.msftncsi.com
|
||||
- msftconnecttest.com
|
||||
- msftncsi.com
|
||||
enhanced-mode: fake-ip
|
||||
fake-ip-range: 198.18.0.1/16
|
||||
fake-ip-filter-mode: blacklist
|
||||
fake-ip-filter:
|
||||
- "*.lan"
|
||||
- "*.localdomain"
|
||||
- "*.example"
|
||||
- "*.invalid"
|
||||
- "*.localhost"
|
||||
- "*.test"
|
||||
- "*.local"
|
||||
- "*.home.arpa"
|
||||
- "*.direct"
|
||||
- "*.orb.local"
|
||||
- "*.ip6-localhost"
|
||||
- "*.ip6-loopback"
|
||||
- "time.*.com"
|
||||
- "time.*.gov"
|
||||
- "time.*.edu.cn"
|
||||
- "time.*.apple.com"
|
||||
- "time-ios.apple.com"
|
||||
- "time1.*.com"
|
||||
- "time2.*.com"
|
||||
- "time3.*.com"
|
||||
- "time4.*.com"
|
||||
- "time5.*.com"
|
||||
- "time6.*.com"
|
||||
- "time7.*.com"
|
||||
- "ntp.*.com"
|
||||
- "ntp1.*.com"
|
||||
- "ntp2.*.com"
|
||||
- "ntp3.*.com"
|
||||
- "ntp4.*.com"
|
||||
- "ntp5.*.com"
|
||||
- "ntp6.*.com"
|
||||
- "ntp7.*.com"
|
||||
- "*.time.edu.cn"
|
||||
- "*.ntp.org.cn"
|
||||
- "+.pool.ntp.org"
|
||||
- "time1.cloud.tencent.com"
|
||||
- "music.163.com"
|
||||
- "*.music.163.com"
|
||||
- "*.126.net"
|
||||
- "musicapi.taihe.com"
|
||||
- "music.taihe.com"
|
||||
- "songsearch.kugou.com"
|
||||
- "trackercdn.kugou.com"
|
||||
- "*.kuwo.cn"
|
||||
- "api-jooxtt.sanook.com"
|
||||
- "api.joox.com"
|
||||
- "joox.com"
|
||||
- "y.qq.com"
|
||||
- "*.y.qq.com"
|
||||
- "streamoc.music.tc.qq.com"
|
||||
- "mobileoc.music.tc.qq.com"
|
||||
- "isure.stream.qqmusic.qq.com"
|
||||
- "dl.stream.qqmusic.qq.com"
|
||||
- "aqqmusic.tc.qq.com"
|
||||
- "amobile.music.tc.qq.com"
|
||||
- "*.xiami.com"
|
||||
- "*.music.migu.cn"
|
||||
- "music.migu.cn"
|
||||
- "+.msftconnecttest.com"
|
||||
- "+.msftncsi.com"
|
||||
- "localhost.ptlogin2.qq.com"
|
||||
- "localhost.sec.qq.com"
|
||||
- "localhost.*.weixin.qq.com"
|
||||
- "+.steamcontent.com"
|
||||
- "+.srv.nintendo.net"
|
||||
- "*.n.n.srv.nintendo.net"
|
||||
- "+.cdn.nintendo.net"
|
||||
- "xbox.*.*.microsoft.com"
|
||||
- "*.*.xboxlive.com"
|
||||
- "xbox.*.microsoft.com"
|
||||
- "xnotify.xboxlive.com"
|
||||
- "+.battle.net"
|
||||
- "+.battlenet.com.cn"
|
||||
- "+.wotgame.cn"
|
||||
- "+.wggames.cn"
|
||||
- "+.wowsgame.cn"
|
||||
- "+.wargaming.net"
|
||||
- "proxy.golang.org"
|
||||
- "+.stun.*.*"
|
||||
- "+.stun.*.*.*"
|
||||
- "+.stun.*.*.*.*"
|
||||
- "+.stun.*.*.*.*.*"
|
||||
- "heartbeat.belkin.com"
|
||||
- "*.linksys.com"
|
||||
- "*.linksyssmartwifi.com"
|
||||
- "*.router.asus.com"
|
||||
- "mesu.apple.com"
|
||||
- "swscan.apple.com"
|
||||
- "swquery.apple.com"
|
||||
- "swdownload.apple.com"
|
||||
- "swcdn.apple.com"
|
||||
- "swdist.apple.com"
|
||||
- "lens.l.google.com"
|
||||
- "na.b.g-tun.com"
|
||||
- "+.nflxvideo.net"
|
||||
- "*.square-enix.com"
|
||||
- "*.finalfantasyxiv.com"
|
||||
- "*.ffxiv.com"
|
||||
- "*.ff14.sdo.com"
|
||||
- "ff.dorado.sdo.com"
|
||||
- "*.mcdn.bilivideo.cn"
|
||||
- "+.media.dssott.com"
|
||||
- "shark007.net"
|
||||
- "Mijia Cloud"
|
||||
- "+.market.xiaomi.com"
|
||||
- "+.cmbchina.com"
|
||||
- "+.cmbimg.com"
|
||||
- "adguardteam.github.io"
|
||||
- "adrules.top"
|
||||
- "anti-ad.net"
|
||||
- "local.adguard.org"
|
||||
- "static.adtidy.org"
|
||||
- "+.sandai.net"
|
||||
- "+.n0808.com"
|
||||
- "+.3gppnetwork.org"
|
||||
- "+.uu.163.com"
|
||||
- "ps.res.netease.com"
|
||||
- "+.pub.3gppnetwork.org"
|
||||
- "+.oray.com"
|
||||
- "+.orayimg.com"
|
||||
- "+.gcloudcs.com"
|
||||
- "+.gcloudsdk.com"
|
||||
- "+.instant.arubanetworks.com"
|
||||
- "+.setmeup.arubanetworks.com"
|
||||
- "+.router.asus.com"
|
||||
- "+.www.asusrouter.com"
|
||||
- "+.hiwifi.com"
|
||||
- "+.leike.cc"
|
||||
- "+.miwifi.com"
|
||||
- "+.my.router"
|
||||
- "+.p.to"
|
||||
- "+.peiluyou.com"
|
||||
- "+.phicomm.me"
|
||||
- "+.router.ctc"
|
||||
- "+.routerlogin.com"
|
||||
- "+.tendawifi.com"
|
||||
- "+.zte.home"
|
||||
- "+.tplogin.cn"
|
||||
- "+.wifi.cmcc"
|
||||
tun:
|
||||
enable: true
|
||||
stack: system
|
||||
device: mochen
|
||||
auto-route: true
|
||||
endpoint-independent-nat: true
|
||||
auto-detect-interface: true
|
||||
endpoint-independents-hijack:
|
||||
- any:53
|
||||
- tcp://any:53
|
||||
strict-route: false
|
||||
mtu: 1500
|
||||
udp-timeout: 120
|
||||
proxies: []
|
||||
|
||||
proxy-groups:
|
||||
- name: 🚀 默认代理
|
||||
type: select
|
||||
proxies:
|
||||
- ♻️ 自动选择
|
||||
- 🔯 故障转移
|
||||
- 🔮 负载均衡
|
||||
|
||||
- name: 🎮 游戏
|
||||
type: select
|
||||
proxies: []
|
||||
|
||||
- name: 🎮 steam
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
- DIRECT
|
||||
|
||||
- name: 📹 YouTube
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 🍀 Google
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 📺 Bilibili
|
||||
type: select
|
||||
proxies:
|
||||
- DIRECT
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 🤖 ChatGPT
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 👨🏿💻 GitHub
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 🐬 OneDrive
|
||||
type: select
|
||||
proxies:
|
||||
- DIRECT
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 🪟 Microsoft
|
||||
type: select
|
||||
proxies:
|
||||
- DIRECT
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 🎵 TikTok
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 📲 Telegram
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 🎥 NETFLIX
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: ✈️ Speedtest
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
- DIRECT
|
||||
|
||||
- name: 💶 PayPal
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 🍎 Apple
|
||||
type: select
|
||||
proxies:
|
||||
- DIRECT
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
|
||||
- name: 🐟 漏网之鱼
|
||||
type: select
|
||||
proxies:
|
||||
- 🚀 默认代理
|
||||
- ♻️ 自动选择
|
||||
- DIRECT
|
||||
|
||||
- name: 🌏 国内网站
|
||||
type: select
|
||||
proxies:
|
||||
- DIRECT
|
||||
- 🚀 默认代理
|
||||
|
||||
- name: ♻️ 自动选择
|
||||
type: url-test
|
||||
url: http://cp.cloudflare.com/
|
||||
interval: 300
|
||||
tolerance: 50
|
||||
timeout: 300
|
||||
max-failed-times: 3
|
||||
proxies: []
|
||||
|
||||
- name: 🔯 故障转移
|
||||
type: fallback
|
||||
url: http://cp.cloudflare.com/
|
||||
interval: 300
|
||||
tolerance: 50
|
||||
timeout: 300
|
||||
max-failed-times: 3
|
||||
proxies: []
|
||||
|
||||
- name: 🔮 负载均衡
|
||||
type: load-balance
|
||||
strategy: consistent-hashing
|
||||
url: http://cp.cloudflare.com/
|
||||
interval: 300
|
||||
tolerance: 50
|
||||
timeout: 300
|
||||
max-failed-times: 3
|
||||
proxies: []
|
||||
|
||||
rules:
|
||||
- GEOSITE,category-ads-all,REJECT
|
||||
- DOMAIN,instant.arubanetworks.com,DIRECT
|
||||
- DOMAIN,setmeup.arubanetworks.com,DIRECT
|
||||
- DOMAIN,router.asus.com,DIRECT
|
||||
- DOMAIN,www.asusrouter.com,DIRECT
|
||||
- DOMAIN-SUFFIX,hiwifi.com,DIRECT
|
||||
- DOMAIN-SUFFIX,leike.cc,DIRECT
|
||||
- DOMAIN-SUFFIX,miwifi.com,DIRECT
|
||||
- DOMAIN-SUFFIX,my.router,DIRECT
|
||||
- DOMAIN-SUFFIX,p.to,DIRECT
|
||||
- DOMAIN-SUFFIX,peiluyou.com,DIRECT
|
||||
- DOMAIN-SUFFIX,phicomm.me,DIRECT
|
||||
- DOMAIN-SUFFIX,router.ctc,DIRECT
|
||||
- DOMAIN-SUFFIX,routerlogin.com,DIRECT
|
||||
- DOMAIN-SUFFIX,tendawifi.com,DIRECT
|
||||
- DOMAIN-SUFFIX,zte.home,DIRECT
|
||||
- DOMAIN-SUFFIX,tplogin.cn,DIRECT
|
||||
- DOMAIN-SUFFIX,wifi.cmcc,DIRECT
|
||||
- DOMAIN-SUFFIX,bilibili.com, 📺 Bilibili
|
||||
- GEOSITE,bilibili, 📺 Bilibili
|
||||
- GEOSITE,biliintl, 📺 Bilibili
|
||||
- DOMAIN,ipinfo.littlediary.cn, 🚀 默认代理
|
||||
- DOMAIN-SUFFIX,browserleaks.com, 🚀 默认代理
|
||||
- DOMAIN-SUFFIX,ping.pe,🚀 默认代理
|
||||
- DOMAIN-SUFFIX,dgameglobal.com,🎮 游戏
|
||||
- DOMAIN-SUFFIX,wilds.monsterhunter.com,🎮 游戏
|
||||
- DOMAIN-SUFFIX,capcom.com,🎮 游戏
|
||||
- DOMAIN-SUFFIX,playfabapi.com,🎮 游戏
|
||||
- DOMAIN-SUFFIX,playfab.com,🎮 游戏
|
||||
- DOMAIN-SUFFIX,akamai.net,🎮 游戏
|
||||
- DOMAIN-SUFFIX,cloudapp.azure.com,🎮 游戏
|
||||
- PROCESS-NAME,CrashReport.exe,🎮 游戏
|
||||
- PROCESS-NAME,InstallerMessage.exe,🎮 游戏
|
||||
- PROCESS-NAME,MonsterHunterWilds.exe,🎮 游戏
|
||||
- PROCESS-NAME,SGuard64.exe,🎮 游戏
|
||||
- PROCESS-NAME,SGuardSvc64.exe,🎮 游戏
|
||||
- PROCESS-NAME,SGuardUpdate64.exe,🎮 游戏
|
||||
- PROCESS-NAME,Uninstall64.exe,🎮 游戏
|
||||
- PROCESS-NAME,ACE-Service64.exe,🎮 游戏
|
||||
- PROCESS-NAME,ACE-Setup64.exe,🎮 游戏
|
||||
- PROCESS-NAME,GeckoParser.exe,🎮 游戏
|
||||
- PROCESS-NAME,MetaperfCapturer.exe,🎮 游戏
|
||||
- PROCESS-NAME,profiler-symbol-server.exe,🎮 游戏
|
||||
- PROCESS-NAME,DownSysSymCache.exe,🎮 游戏
|
||||
- PROCESS-NAME,dumpbin.exe,🎮 游戏
|
||||
- PROCESS-NAME,Link.exe,🎮 游戏
|
||||
- PROCESS-NAME,SymCacheGen.exe,🎮 游戏
|
||||
- PROCESS-NAME,SymChk.exe,🎮 游戏
|
||||
- PROCESS-NAME,WevtUtil.exe,🎮 游戏
|
||||
- PROCESS-NAME,XPerf.exe,🎮 游戏
|
||||
- PROCESS-NAME,DeltaForceClient-Win64-Shipping.exe,🎮 游戏
|
||||
- PROCESS-NAME,INTLWebViewHelper.exe,🎮 游戏
|
||||
- PROCESS-NAME,pfbs.exe,🎮 游戏
|
||||
- PROCESS-NAME,UnrealCEFSubProcess.exe,🎮 游戏
|
||||
- PROCESS-NAME,UE4PrereqSetup_x64.exe,🎮 游戏
|
||||
- PROCESS-NAME,DeltaForceClient.exe,🎮 游戏
|
||||
- PROCESS-NAME,EAAntiCheat.Installer.exe,🎮 游戏
|
||||
- PROCESS-NAME,bf6.exe,🎮 游戏
|
||||
- PROCESS-NAME,bf6.exe,🎮 游戏
|
||||
- PROCESS-NAME,EAAntiCheat.GameServiceLauncher.exe,🎮 游戏
|
||||
- PROCESS-NAME,EAAntiCheat.GameService.exe,🎮 游戏
|
||||
- DOMAIN-SUFFIX,eaanticheat.ac.ea.com,🎮 游戏
|
||||
- GEOSITE,steam@cn,🌏 国内网站
|
||||
- GEOSITE,steam,🎮 steam
|
||||
- GEOSITE,apple,🍎 Apple
|
||||
- GEOSITE,private,🌏 国内网站
|
||||
- GEOSITE,openai,🤖 ChatGPT
|
||||
- GEOSITE,google-gemini,🤖 ChatGPT
|
||||
- GEOSITE,github,👨🏿💻 GitHub
|
||||
- GEOSITE,onedrive,🐬 OneDrive
|
||||
- GEOSITE,microsoft,🪟 Microsoft
|
||||
- GEOSITE,youtube,📹 YouTube
|
||||
- GEOSITE,google,🍀 Google
|
||||
- GEOSITE,tiktok,🎵 TikTok
|
||||
- GEOSITE,speedtest,✈️ Speedtest
|
||||
- GEOSITE,telegram,📲 Telegram
|
||||
- GEOSITE,netflix,🎥 NETFLIX
|
||||
- GEOSITE,paypal,💶 PayPal
|
||||
- GEOSITE,gfw,🚀 默认代理
|
||||
- GEOSITE,category-dev,🚀 默认代理
|
||||
- DOMAIN-SUFFIX,cloudflare-dns.com,🚀 默认代理
|
||||
- DOMAIN-SUFFIX,api.nn.ci,🚀 默认代理
|
||||
- DOMAIN-SUFFIX,api.ipify.org,🚀 默认代理
|
||||
- DOMAIN-SUFFIX,gsas.apple.com,🚀 默认代理
|
||||
- DOMAIN-SUFFIX,hotmail.com,🚀 默认代理
|
||||
- GEOSITE,CN,🌏 国内网站
|
||||
- GEOIP,private,🌏 国内网站,no-resolve
|
||||
- IP-CIDR,1.0.0.1/32,🚀 默认代理,no-resolve
|
||||
- IP-CIDR,1.1.1.1/32,🚀 默认代理,no-resolve
|
||||
- IP-CIDR,8.8.8.8/32,🚀 默认代理,no-resolve
|
||||
- IP-CIDR,8.8.4.4/32,🚀 默认代理,no-resolve
|
||||
- GEOIP,google,🍀 Google
|
||||
- GEOIP,netflix,🎥 NETFLIX
|
||||
- GEOIP,telegram,📲 Telegram
|
||||
- GEOIP,CN,🌏 国内网站
|
||||
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
|
||||
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
|
||||
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
|
||||
- IP-CIDR,100.64.0.0/10,DIRECT,no-resolve
|
||||
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
|
||||
- IP-CIDR,198.18.0.0/16,DIRECT,no-resolve
|
||||
- IP-CIDR,224.0.0.0/4,DIRECT,no-resolve
|
||||
- IP-CIDR6,::1/128,DIRECT,no-resolve
|
||||
- IP-CIDR6,fc00::/7,DIRECT,no-resolve
|
||||
- IP-CIDR6,fe80::/10,DIRECT,no-resolve
|
||||
- IP-CIDR6,fd00::/8,DIRECT,no-resolve
|
||||
- MATCH,🐟 漏网之鱼
|
||||
576
submodule/surfboard.toml
Normal file
576
submodule/surfboard.toml
Normal file
@@ -0,0 +1,576 @@
|
||||
#!MANAGED-CONFIG $subs_link interval=43200 strict=true
|
||||
# Thanks @Hackl0us SS-Rule-Snippet
|
||||
|
||||
[General]
|
||||
loglevel = notify
|
||||
ipv6 = false
|
||||
skip-proxy = localhost, *.local, injections.adguard.org, local.adguard.org, 0.0.0.0/8, 10.0.0.0/8, 17.0.0.0/8, 100.64.0.0/10, 127.0.0.0/8, 169.254.0.0/16, 172.16.0.0/12, 192.0.0.0/24, 192.0.2.0/24, 192.168.0.0/16, 192.88.99.0/24, 198.18.0.0/15, 198.51.100.0/24, 203.0.113.0/24, 224.0.0.0/4, 240.0.0.0/4, 255.255.255.255/32
|
||||
tls-provider = default
|
||||
show-error-page-for-reject = true
|
||||
dns-server = 223.6.6.6, 119.29.29.29, 119.28.28.28
|
||||
test-timeout = 5
|
||||
internet-test-url = http://bing.com
|
||||
proxy-test-url = http://bing.com
|
||||
|
||||
[Panel]
|
||||
SubscribeInfo = $subscribe_info, style=info
|
||||
|
||||
# Surfboard 的服务器和策略组配置方式与 Surge 类似, 可以参考 Surge 的规则配置手册: https://manual.nssurge.com/
|
||||
|
||||
[Proxy]
|
||||
$proxies
|
||||
|
||||
[Proxy Group]
|
||||
Proxy = select, auto, fallback, $proxy_group
|
||||
auto = url-test, $proxy_group, url=http://www.gstatic.com/generate_204, interval=43200
|
||||
fallback = fallback, $proxy_group, url=http://www.gstatic.com/generate_204, interval=43200
|
||||
|
||||
[Rule]
|
||||
# 自定义规则
|
||||
## 您可以在此处插入自定义规则
|
||||
DOMAIN-SUFFIX,tophub.today,DIRECT
|
||||
DOMAIN-SUFFIX,netmarble.com,Proxy
|
||||
DOMAIN-SUFFIX,worldflipper.jp,Proxy
|
||||
DOMAIN-SUFFIX,naver.com,Proxy
|
||||
DOMAIN-SUFFIX,smartmediarep.com,Proxy
|
||||
DOMAIN-SUFFIX,technews.tw,Proxy
|
||||
|
||||
# 强制订阅域名直连
|
||||
DOMAIN,$subs_domain,DIRECT
|
||||
|
||||
# Google 中国服务
|
||||
DOMAIN-SUFFIX,services.googleapis.cn,Proxy
|
||||
DOMAIN-SUFFIX,xn--ngstr-lra8j.com,Proxy
|
||||
|
||||
# Apple
|
||||
DOMAIN,developer.apple.com,Proxy
|
||||
DOMAIN-SUFFIX,digicert.com,Proxy
|
||||
USER-AGENT,com.apple.trustd*,Proxy
|
||||
DOMAIN-SUFFIX,apple-dns.net,Proxy
|
||||
DOMAIN,testflight.apple.com,Proxy
|
||||
DOMAIN,sandbox.itunes.apple.com,Proxy
|
||||
DOMAIN,itunes.apple.com,Proxy
|
||||
DOMAIN-SUFFIX,apps.apple.com,Proxy
|
||||
DOMAIN-SUFFIX,blobstore.apple.com,Proxy
|
||||
DOMAIN,cvws.icloud-content.com,Proxy
|
||||
DOMAIN,safebrowsing.urlsec.qq.com,DIRECT
|
||||
DOMAIN,safebrowsing.googleapis.com,DIRECT
|
||||
USER-AGENT,com.apple.appstored*,DIRECT
|
||||
USER-AGENT,AppStore*,DIRECT
|
||||
DOMAIN-SUFFIX,mzstatic.com,DIRECT
|
||||
DOMAIN-SUFFIX,itunes.apple.com,DIRECT
|
||||
DOMAIN-SUFFIX,icloud.com,DIRECT
|
||||
DOMAIN-SUFFIX,icloud-content.com,DIRECT
|
||||
USER-AGENT,cloudd*,DIRECT
|
||||
USER-AGENT,*com.apple.WebKit*,DIRECT
|
||||
USER-AGENT,*com.apple.*,DIRECT
|
||||
DOMAIN-SUFFIX,me.com,DIRECT
|
||||
DOMAIN-SUFFIX,aaplimg.com,DIRECT
|
||||
DOMAIN-SUFFIX,cdn20.com,DIRECT
|
||||
DOMAIN-SUFFIX,cdn-apple.com,DIRECT
|
||||
DOMAIN-SUFFIX,akadns.net,DIRECT
|
||||
DOMAIN-SUFFIX,akamaiedge.net,DIRECT
|
||||
DOMAIN-SUFFIX,edgekey.net,DIRECT
|
||||
DOMAIN-SUFFIX,mwcloudcdn.com,DIRECT
|
||||
DOMAIN-SUFFIX,mwcname.com,DIRECT
|
||||
DOMAIN-SUFFIX,apple.com,DIRECT
|
||||
DOMAIN-SUFFIX,apple-cloudkit.com,DIRECT
|
||||
DOMAIN-SUFFIX,apple-mapkit.com,DIRECT
|
||||
|
||||
# 国内网站
|
||||
USER-AGENT,MicroMessenger Client*,DIRECT
|
||||
USER-AGENT,WeChat*,DIRECT
|
||||
|
||||
DOMAIN-SUFFIX,126.com,DIRECT
|
||||
DOMAIN-SUFFIX,126.net,DIRECT
|
||||
DOMAIN-SUFFIX,127.net,DIRECT
|
||||
DOMAIN-SUFFIX,163.com,DIRECT
|
||||
DOMAIN-SUFFIX,360buyimg.com,DIRECT
|
||||
DOMAIN-SUFFIX,36kr.com,DIRECT
|
||||
DOMAIN-SUFFIX,acfun.tv,DIRECT
|
||||
DOMAIN-SUFFIX,air-matters.com,DIRECT
|
||||
DOMAIN-SUFFIX,aixifan.com,DIRECT
|
||||
DOMAIN-KEYWORD,alicdn,DIRECT
|
||||
DOMAIN-KEYWORD,alipay,DIRECT
|
||||
DOMAIN-KEYWORD,aliyun,DIRECT
|
||||
DOMAIN-KEYWORD,taobao,DIRECT
|
||||
DOMAIN-SUFFIX,amap.com,DIRECT
|
||||
DOMAIN-SUFFIX,autonavi.com,DIRECT
|
||||
DOMAIN-KEYWORD,baidu,DIRECT
|
||||
DOMAIN-SUFFIX,bdimg.com,DIRECT
|
||||
DOMAIN-SUFFIX,bdstatic.com,DIRECT
|
||||
DOMAIN-SUFFIX,bilibili.com,DIRECT
|
||||
DOMAIN-SUFFIX,bilivideo.com,DIRECT
|
||||
DOMAIN-SUFFIX,caiyunapp.com,DIRECT
|
||||
DOMAIN-SUFFIX,clouddn.com,DIRECT
|
||||
DOMAIN-SUFFIX,cnbeta.com,DIRECT
|
||||
DOMAIN-SUFFIX,cnbetacdn.com,DIRECT
|
||||
DOMAIN-SUFFIX,cootekservice.com,DIRECT
|
||||
DOMAIN-SUFFIX,csdn.net,DIRECT
|
||||
DOMAIN-SUFFIX,ctrip.com,DIRECT
|
||||
DOMAIN-SUFFIX,dgtle.com,DIRECT
|
||||
DOMAIN-SUFFIX,dianping.com,DIRECT
|
||||
DOMAIN-SUFFIX,douban.com,DIRECT
|
||||
DOMAIN-SUFFIX,doubanio.com,DIRECT
|
||||
DOMAIN-SUFFIX,duokan.com,DIRECT
|
||||
DOMAIN-SUFFIX,easou.com,DIRECT
|
||||
DOMAIN-SUFFIX,ele.me,DIRECT
|
||||
DOMAIN-SUFFIX,feng.com,DIRECT
|
||||
DOMAIN-SUFFIX,fir.im,DIRECT
|
||||
DOMAIN-SUFFIX,frdic.com,DIRECT
|
||||
DOMAIN-SUFFIX,g-cores.com,DIRECT
|
||||
DOMAIN-SUFFIX,godic.net,DIRECT
|
||||
DOMAIN-SUFFIX,gtimg.com,DIRECT
|
||||
DOMAIN-SUFFIX,hongxiu.com,DIRECT
|
||||
DOMAIN-SUFFIX,hxcdn.net,DIRECT
|
||||
DOMAIN-SUFFIX,iciba.com,DIRECT
|
||||
DOMAIN-SUFFIX,ifeng.com,DIRECT
|
||||
DOMAIN-SUFFIX,ifengimg.com,DIRECT
|
||||
DOMAIN-SUFFIX,ipip.net,DIRECT
|
||||
DOMAIN-SUFFIX,iqiyi.com,DIRECT
|
||||
DOMAIN-SUFFIX,jd.com,DIRECT
|
||||
DOMAIN-SUFFIX,jianshu.com,DIRECT
|
||||
DOMAIN-SUFFIX,knewone.com,DIRECT
|
||||
DOMAIN-SUFFIX,le.com,DIRECT
|
||||
DOMAIN-SUFFIX,lecloud.com,DIRECT
|
||||
DOMAIN-SUFFIX,lemicp.com,DIRECT
|
||||
DOMAIN-SUFFIX,licdn.com,DIRECT
|
||||
DOMAIN-SUFFIX,luoo.net,DIRECT
|
||||
DOMAIN-SUFFIX,meituan.com,DIRECT
|
||||
DOMAIN-SUFFIX,meituan.net,DIRECT
|
||||
DOMAIN-SUFFIX,mi.com,DIRECT
|
||||
DOMAIN-SUFFIX,miaopai.com,DIRECT
|
||||
DOMAIN-SUFFIX,microsoft.com,DIRECT
|
||||
DOMAIN-SUFFIX,microsoftonline.com,DIRECT
|
||||
DOMAIN-SUFFIX,miui.com,DIRECT
|
||||
DOMAIN-SUFFIX,miwifi.com,DIRECT
|
||||
DOMAIN-SUFFIX,mob.com,DIRECT
|
||||
DOMAIN-SUFFIX,netease.com,DIRECT
|
||||
DOMAIN-SUFFIX,office.com,DIRECT
|
||||
DOMAIN-KEYWORD,officecdn,DIRECT
|
||||
DOMAIN-SUFFIX,office365.com,DIRECT
|
||||
DOMAIN-SUFFIX,oschina.net,DIRECT
|
||||
DOMAIN-SUFFIX,ppsimg.com,DIRECT
|
||||
DOMAIN-SUFFIX,pstatp.com,DIRECT
|
||||
DOMAIN-SUFFIX,qcloud.com,DIRECT
|
||||
DOMAIN-SUFFIX,qdaily.com,DIRECT
|
||||
DOMAIN-SUFFIX,qdmm.com,DIRECT
|
||||
DOMAIN-SUFFIX,qhimg.com,DIRECT
|
||||
DOMAIN-SUFFIX,qhres.com,DIRECT
|
||||
DOMAIN-SUFFIX,qidian.com,DIRECT
|
||||
DOMAIN-SUFFIX,qihucdn.com,DIRECT
|
||||
DOMAIN-SUFFIX,qiniu.com,DIRECT
|
||||
DOMAIN-SUFFIX,qiniucdn.com,DIRECT
|
||||
DOMAIN-SUFFIX,qiyipic.com,DIRECT
|
||||
DOMAIN-SUFFIX,qq.com,DIRECT
|
||||
DOMAIN-SUFFIX,qqurl.com,DIRECT
|
||||
DOMAIN-SUFFIX,rarbg.to,DIRECT
|
||||
DOMAIN-SUFFIX,ruguoapp.com,DIRECT
|
||||
DOMAIN-SUFFIX,segmentfault.com,DIRECT
|
||||
DOMAIN-SUFFIX,sinaapp.com,DIRECT
|
||||
DOMAIN-SUFFIX,smzdm.com,DIRECT
|
||||
DOMAIN-SUFFIX,snapdrop.net,DIRECT
|
||||
DOMAIN-SUFFIX,sogou.com,DIRECT
|
||||
DOMAIN-SUFFIX,sogoucdn.com,DIRECT
|
||||
DOMAIN-SUFFIX,sohu.com,DIRECT
|
||||
DOMAIN-SUFFIX,soku.com,DIRECT
|
||||
DOMAIN-SUFFIX,speedtest.net,DIRECT
|
||||
DOMAIN-SUFFIX,sspai.com,DIRECT
|
||||
DOMAIN-SUFFIX,suning.com,DIRECT
|
||||
DOMAIN-SUFFIX,taobao.com,DIRECT
|
||||
DOMAIN-SUFFIX,tencent.com,DIRECT
|
||||
DOMAIN-SUFFIX,tenpay.com,DIRECT
|
||||
DOMAIN-SUFFIX,tianyancha.com,DIRECT
|
||||
DOMAIN-KEYWORD,.tmall.com,DIRECT
|
||||
DOMAIN-SUFFIX,tudou.com,DIRECT
|
||||
DOMAIN-SUFFIX,umetrip.com,DIRECT
|
||||
DOMAIN-SUFFIX,upaiyun.com,DIRECT
|
||||
DOMAIN-SUFFIX,upyun.com,DIRECT
|
||||
DOMAIN-SUFFIX,veryzhun.com,DIRECT
|
||||
DOMAIN-SUFFIX,weather.com,DIRECT
|
||||
DOMAIN-SUFFIX,weibo.com,DIRECT
|
||||
DOMAIN-SUFFIX,xiami.com,DIRECT
|
||||
DOMAIN-SUFFIX,xiami.net,DIRECT
|
||||
DOMAIN-SUFFIX,xiaomicp.com,DIRECT
|
||||
DOMAIN-SUFFIX,ximalaya.com,DIRECT
|
||||
DOMAIN-SUFFIX,xmcdn.com,DIRECT
|
||||
DOMAIN-SUFFIX,xunlei.com,DIRECT
|
||||
DOMAIN-SUFFIX,yhd.com,DIRECT
|
||||
DOMAIN-SUFFIX,yihaodianimg.com,DIRECT
|
||||
DOMAIN-SUFFIX,yinxiang.com,DIRECT
|
||||
DOMAIN-SUFFIX,ykimg.com,DIRECT
|
||||
DOMAIN-SUFFIX,youdao.com,DIRECT
|
||||
DOMAIN-SUFFIX,youku.com,DIRECT
|
||||
DOMAIN-SUFFIX,zealer.com,DIRECT
|
||||
DOMAIN-SUFFIX,zhihu.com,DIRECT
|
||||
DOMAIN-SUFFIX,zhimg.com,DIRECT
|
||||
DOMAIN-SUFFIX,zimuzu.tv,DIRECT
|
||||
DOMAIN-SUFFIX,zoho.com,DIRECT
|
||||
|
||||
# 常见广告
|
||||
DOMAIN-KEYWORD,admarvel,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,admaster,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,adsage,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,adsmogo,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,adsrvmedia,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,adwords,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,adservice,REJECT-TINYGIF
|
||||
DOMAIN-SUFFIX,appsflyer.com,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,domob,REJECT-TINYGIF
|
||||
DOMAIN-SUFFIX,doubleclick.net,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,duomeng,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,dwtrack,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,guanggao,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,lianmeng,REJECT-TINYGIF
|
||||
DOMAIN-SUFFIX,mmstat.com,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,mopub,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,omgmta,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,openx,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,partnerad,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,pingfore,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,supersonicads,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,uedas,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,umeng,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,usage,REJECT-TINYGIF
|
||||
DOMAIN-SUFFIX,vungle.com,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,wlmonitor,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,zjtoolbar,REJECT-TINYGIF
|
||||
|
||||
## 抗 DNS 污染
|
||||
DOMAIN-KEYWORD,amazon,Proxy
|
||||
DOMAIN-KEYWORD,google,Proxy
|
||||
DOMAIN-KEYWORD,gmail,Proxy
|
||||
DOMAIN-KEYWORD,youtube,Proxy
|
||||
DOMAIN-KEYWORD,facebook,Proxy
|
||||
DOMAIN-SUFFIX,fb.me,Proxy
|
||||
DOMAIN-SUFFIX,fbcdn.net,Proxy
|
||||
DOMAIN-KEYWORD,twitter,Proxy
|
||||
DOMAIN-KEYWORD,instagram,Proxy
|
||||
DOMAIN-KEYWORD,dropbox,Proxy
|
||||
DOMAIN-SUFFIX,twimg.com,Proxy
|
||||
DOMAIN-KEYWORD,blogspot,Proxy
|
||||
DOMAIN-SUFFIX,youtu.be,Proxy
|
||||
|
||||
## 常见国外域名列表
|
||||
DOMAIN-SUFFIX,9to5mac.com,Proxy
|
||||
DOMAIN-SUFFIX,abpchina.org,Proxy
|
||||
DOMAIN-SUFFIX,adblockplus.org,Proxy
|
||||
DOMAIN-SUFFIX,adobe.com,Proxy
|
||||
DOMAIN-SUFFIX,akamaized.net,Proxy
|
||||
DOMAIN-SUFFIX,alfredapp.com,Proxy
|
||||
DOMAIN-SUFFIX,amplitude.com,Proxy
|
||||
DOMAIN-SUFFIX,ampproject.org,Proxy
|
||||
DOMAIN-SUFFIX,android.com,Proxy
|
||||
DOMAIN-SUFFIX,angularjs.org,Proxy
|
||||
DOMAIN-SUFFIX,aolcdn.com,Proxy
|
||||
DOMAIN-SUFFIX,apkpure.com,Proxy
|
||||
DOMAIN-SUFFIX,appledaily.com,Proxy
|
||||
DOMAIN-SUFFIX,appshopper.com,Proxy
|
||||
DOMAIN-SUFFIX,appspot.com,Proxy
|
||||
DOMAIN-SUFFIX,arcgis.com,Proxy
|
||||
DOMAIN-SUFFIX,archive.org,Proxy
|
||||
DOMAIN-SUFFIX,armorgames.com,Proxy
|
||||
DOMAIN-SUFFIX,aspnetcdn.com,Proxy
|
||||
DOMAIN-SUFFIX,att.com,Proxy
|
||||
DOMAIN-SUFFIX,awsstatic.com,Proxy
|
||||
DOMAIN-SUFFIX,azureedge.net,Proxy
|
||||
DOMAIN-SUFFIX,azurewebsites.net,Proxy
|
||||
DOMAIN-SUFFIX,bing.com,Proxy
|
||||
DOMAIN-SUFFIX,bintray.com,Proxy
|
||||
DOMAIN-SUFFIX,bit.com,Proxy
|
||||
DOMAIN-SUFFIX,bit.ly,Proxy
|
||||
DOMAIN-SUFFIX,bitbucket.org,Proxy
|
||||
DOMAIN-SUFFIX,bjango.com,Proxy
|
||||
DOMAIN-SUFFIX,bkrtx.com,Proxy
|
||||
DOMAIN-SUFFIX,blog.com,Proxy
|
||||
DOMAIN-SUFFIX,blogcdn.com,Proxy
|
||||
DOMAIN-SUFFIX,blogger.com,Proxy
|
||||
DOMAIN-SUFFIX,blogsmithmedia.com,Proxy
|
||||
DOMAIN-SUFFIX,blogspot.com,Proxy
|
||||
DOMAIN-SUFFIX,blogspot.hk,Proxy
|
||||
DOMAIN-SUFFIX,bloomberg.com,Proxy
|
||||
DOMAIN-SUFFIX,box.com,Proxy
|
||||
DOMAIN-SUFFIX,box.net,Proxy
|
||||
DOMAIN-SUFFIX,cachefly.net,Proxy
|
||||
DOMAIN-SUFFIX,chromium.org,Proxy
|
||||
DOMAIN-SUFFIX,cl.ly,Proxy
|
||||
DOMAIN-SUFFIX,cloudflare.com,Proxy
|
||||
DOMAIN-SUFFIX,cloudfront.net,Proxy
|
||||
DOMAIN-SUFFIX,cloudmagic.com,Proxy
|
||||
DOMAIN-SUFFIX,cmail19.com,Proxy
|
||||
DOMAIN-SUFFIX,cnet.com,Proxy
|
||||
DOMAIN-SUFFIX,cocoapods.org,Proxy
|
||||
DOMAIN-SUFFIX,comodoca.com,Proxy
|
||||
DOMAIN-SUFFIX,crashlytics.com,Proxy
|
||||
DOMAIN-SUFFIX,culturedcode.com,Proxy
|
||||
DOMAIN-SUFFIX,d.pr,Proxy
|
||||
DOMAIN-SUFFIX,danilo.to,Proxy
|
||||
DOMAIN-SUFFIX,dayone.me,Proxy
|
||||
DOMAIN-SUFFIX,db.tt,Proxy
|
||||
DOMAIN-SUFFIX,deskconnect.com,Proxy
|
||||
DOMAIN-SUFFIX,disq.us,Proxy
|
||||
DOMAIN-SUFFIX,disqus.com,Proxy
|
||||
DOMAIN-SUFFIX,disquscdn.com,Proxy
|
||||
DOMAIN-SUFFIX,dnsimple.com,Proxy
|
||||
DOMAIN-SUFFIX,docker.com,Proxy
|
||||
DOMAIN-SUFFIX,dribbble.com,Proxy
|
||||
DOMAIN-SUFFIX,droplr.com,Proxy
|
||||
DOMAIN-SUFFIX,duckduckgo.com,Proxy
|
||||
DOMAIN-SUFFIX,dueapp.com,Proxy
|
||||
DOMAIN-SUFFIX,dytt8.net,Proxy
|
||||
DOMAIN-SUFFIX,edgecastcdn.net,Proxy
|
||||
DOMAIN-SUFFIX,edgekey.net,Proxy
|
||||
DOMAIN-SUFFIX,edgesuite.net,Proxy
|
||||
DOMAIN-SUFFIX,engadget.com,Proxy
|
||||
DOMAIN-SUFFIX,entrust.net,Proxy
|
||||
DOMAIN-SUFFIX,eurekavpt.com,Proxy
|
||||
DOMAIN-SUFFIX,evernote.com,Proxy
|
||||
DOMAIN-SUFFIX,fabric.io,Proxy
|
||||
DOMAIN-SUFFIX,fast.com,Proxy
|
||||
DOMAIN-SUFFIX,fastly.net,Proxy
|
||||
DOMAIN-SUFFIX,fc2.com,Proxy
|
||||
DOMAIN-SUFFIX,feedburner.com,Proxy
|
||||
DOMAIN-SUFFIX,feedly.com,Proxy
|
||||
DOMAIN-SUFFIX,feedsportal.com,Proxy
|
||||
DOMAIN-SUFFIX,fiftythree.com,Proxy
|
||||
DOMAIN-SUFFIX,firebaseio.com,Proxy
|
||||
DOMAIN-SUFFIX,flexibits.com,Proxy
|
||||
DOMAIN-SUFFIX,flickr.com,Proxy
|
||||
DOMAIN-SUFFIX,flipboard.com,Proxy
|
||||
DOMAIN-SUFFIX,g.co,Proxy
|
||||
DOMAIN-SUFFIX,gabia.net,Proxy
|
||||
DOMAIN-SUFFIX,geni.us,Proxy
|
||||
DOMAIN-SUFFIX,gfx.ms,Proxy
|
||||
DOMAIN-SUFFIX,ggpht.com,Proxy
|
||||
DOMAIN-SUFFIX,ghostnoteapp.com,Proxy
|
||||
DOMAIN-SUFFIX,git.io,Proxy
|
||||
DOMAIN-KEYWORD,github,Proxy
|
||||
DOMAIN-SUFFIX,globalsign.com,Proxy
|
||||
DOMAIN-SUFFIX,gmodules.com,Proxy
|
||||
DOMAIN-SUFFIX,godaddy.com,Proxy
|
||||
DOMAIN-SUFFIX,golang.org,Proxy
|
||||
DOMAIN-SUFFIX,gongm.in,Proxy
|
||||
DOMAIN-SUFFIX,goo.gl,Proxy
|
||||
DOMAIN-SUFFIX,goodreaders.com,Proxy
|
||||
DOMAIN-SUFFIX,goodreads.com,Proxy
|
||||
DOMAIN-SUFFIX,gravatar.com,Proxy
|
||||
DOMAIN-SUFFIX,gstatic.com,Proxy
|
||||
DOMAIN-SUFFIX,gvt0.com,Proxy
|
||||
DOMAIN-SUFFIX,hockeyapp.net,Proxy
|
||||
DOMAIN-SUFFIX,hotmail.com,Proxy
|
||||
DOMAIN-SUFFIX,icons8.com,Proxy
|
||||
DOMAIN-SUFFIX,ifixit.com,Proxy
|
||||
DOMAIN-SUFFIX,ift.tt,Proxy
|
||||
DOMAIN-SUFFIX,ifttt.com,Proxy
|
||||
DOMAIN-SUFFIX,iherb.com,Proxy
|
||||
DOMAIN-SUFFIX,imageshack.us,Proxy
|
||||
DOMAIN-SUFFIX,img.ly,Proxy
|
||||
DOMAIN-SUFFIX,imgur.com,Proxy
|
||||
DOMAIN-SUFFIX,imore.com,Proxy
|
||||
DOMAIN-SUFFIX,instapaper.com,Proxy
|
||||
DOMAIN-SUFFIX,ipn.li,Proxy
|
||||
DOMAIN-SUFFIX,is.gd,Proxy
|
||||
DOMAIN-SUFFIX,issuu.com,Proxy
|
||||
DOMAIN-SUFFIX,itgonglun.com,Proxy
|
||||
DOMAIN-SUFFIX,itun.es,Proxy
|
||||
DOMAIN-SUFFIX,ixquick.com,Proxy
|
||||
DOMAIN-SUFFIX,j.mp,Proxy
|
||||
DOMAIN-SUFFIX,js.revsci.net,Proxy
|
||||
DOMAIN-SUFFIX,jshint.com,Proxy
|
||||
DOMAIN-SUFFIX,jtvnw.net,Proxy
|
||||
DOMAIN-SUFFIX,justgetflux.com,Proxy
|
||||
DOMAIN-SUFFIX,kat.cr,Proxy
|
||||
DOMAIN-SUFFIX,klip.me,Proxy
|
||||
DOMAIN-SUFFIX,libsyn.com,Proxy
|
||||
DOMAIN-SUFFIX,linkedin.com,Proxy
|
||||
DOMAIN-SUFFIX,line-apps.com,Proxy
|
||||
DOMAIN-SUFFIX,linode.com,Proxy
|
||||
DOMAIN-SUFFIX,lithium.com,Proxy
|
||||
DOMAIN-SUFFIX,littlehj.com,Proxy
|
||||
DOMAIN-SUFFIX,live.com,Proxy
|
||||
DOMAIN-SUFFIX,live.net,Proxy
|
||||
DOMAIN-SUFFIX,livefilestore.com,Proxy
|
||||
DOMAIN-SUFFIX,llnwd.net,Proxy
|
||||
DOMAIN-SUFFIX,macid.co,Proxy
|
||||
DOMAIN-SUFFIX,macromedia.com,Proxy
|
||||
DOMAIN-SUFFIX,macrumors.com,Proxy
|
||||
DOMAIN-SUFFIX,mashable.com,Proxy
|
||||
DOMAIN-SUFFIX,mathjax.org,Proxy
|
||||
DOMAIN-SUFFIX,medium.com,Proxy
|
||||
DOMAIN-SUFFIX,mega.co.nz,Proxy
|
||||
DOMAIN-SUFFIX,mega.nz,Proxy
|
||||
DOMAIN-SUFFIX,megaupload.com,Proxy
|
||||
DOMAIN-SUFFIX,microsofttranslator.com,Proxy
|
||||
DOMAIN-SUFFIX,mindnode.com,Proxy
|
||||
DOMAIN-SUFFIX,mobile01.com,Proxy
|
||||
DOMAIN-SUFFIX,modmyi.com,Proxy
|
||||
DOMAIN-SUFFIX,msedge.net,Proxy
|
||||
DOMAIN-SUFFIX,myfontastic.com,Proxy
|
||||
DOMAIN-SUFFIX,name.com,Proxy
|
||||
DOMAIN-SUFFIX,nextmedia.com,Proxy
|
||||
DOMAIN-SUFFIX,nsstatic.net,Proxy
|
||||
DOMAIN-SUFFIX,nssurge.com,Proxy
|
||||
DOMAIN-SUFFIX,nyt.com,Proxy
|
||||
DOMAIN-SUFFIX,nytimes.com,Proxy
|
||||
DOMAIN-SUFFIX,omnigroup.com,Proxy
|
||||
DOMAIN-SUFFIX,onedrive.com,Proxy
|
||||
DOMAIN-SUFFIX,onenote.com,Proxy
|
||||
DOMAIN-SUFFIX,ooyala.com,Proxy
|
||||
DOMAIN-SUFFIX,openvpn.net,Proxy
|
||||
DOMAIN-SUFFIX,openwrt.org,Proxy
|
||||
DOMAIN-SUFFIX,orkut.com,Proxy
|
||||
DOMAIN-SUFFIX,osxdaily.com,Proxy
|
||||
DOMAIN-SUFFIX,outlook.com,Proxy
|
||||
DOMAIN-SUFFIX,ow.ly,Proxy
|
||||
DOMAIN-SUFFIX,paddleapi.com,Proxy
|
||||
DOMAIN-SUFFIX,parallels.com,Proxy
|
||||
DOMAIN-SUFFIX,parse.com,Proxy
|
||||
DOMAIN-SUFFIX,pdfexpert.com,Proxy
|
||||
DOMAIN-SUFFIX,periscope.tv,Proxy
|
||||
DOMAIN-SUFFIX,pinboard.in,Proxy
|
||||
DOMAIN-SUFFIX,pinterest.com,Proxy
|
||||
DOMAIN-SUFFIX,pixelmator.com,Proxy
|
||||
DOMAIN-SUFFIX,pixiv.net,Proxy
|
||||
DOMAIN-SUFFIX,playpcesor.com,Proxy
|
||||
DOMAIN-SUFFIX,playstation.com,Proxy
|
||||
DOMAIN-SUFFIX,playstation.com.hk,Proxy
|
||||
DOMAIN-SUFFIX,playstation.net,Proxy
|
||||
DOMAIN-SUFFIX,playstationnetwork.com,Proxy
|
||||
DOMAIN-SUFFIX,pushwoosh.com,Proxy
|
||||
DOMAIN-SUFFIX,rime.im,Proxy
|
||||
DOMAIN-SUFFIX,servebom.com,Proxy
|
||||
DOMAIN-SUFFIX,sfx.ms,Proxy
|
||||
DOMAIN-SUFFIX,shadowsocks.org,Proxy
|
||||
DOMAIN-SUFFIX,sharethis.com,Proxy
|
||||
DOMAIN-SUFFIX,shazam.com,Proxy
|
||||
DOMAIN-SUFFIX,skype.com,Proxy
|
||||
DOMAIN-SUFFIX,smartdnsProxy.com,Proxy
|
||||
DOMAIN-SUFFIX,smartmailcloud.com,Proxy
|
||||
DOMAIN-SUFFIX,sndcdn.com,Proxy
|
||||
DOMAIN-SUFFIX,sony.com,Proxy
|
||||
DOMAIN-SUFFIX,soundcloud.com,Proxy
|
||||
DOMAIN-SUFFIX,sourceforge.net,Proxy
|
||||
DOMAIN-SUFFIX,spotify.com,Proxy
|
||||
DOMAIN-SUFFIX,squarespace.com,Proxy
|
||||
DOMAIN-SUFFIX,sstatic.net,Proxy
|
||||
DOMAIN-SUFFIX,st.luluku.pw,Proxy
|
||||
DOMAIN-SUFFIX,stackoverflow.com,Proxy
|
||||
DOMAIN-SUFFIX,startpage.com,Proxy
|
||||
DOMAIN-SUFFIX,staticflickr.com,Proxy
|
||||
DOMAIN-SUFFIX,steamcommunity.com,Proxy
|
||||
DOMAIN-SUFFIX,symauth.com,Proxy
|
||||
DOMAIN-SUFFIX,symcb.com,Proxy
|
||||
DOMAIN-SUFFIX,symcd.com,Proxy
|
||||
DOMAIN-SUFFIX,tapbots.com,Proxy
|
||||
DOMAIN-SUFFIX,tapbots.net,Proxy
|
||||
DOMAIN-SUFFIX,tdesktop.com,Proxy
|
||||
DOMAIN-SUFFIX,techcrunch.com,Proxy
|
||||
DOMAIN-SUFFIX,techsmith.com,Proxy
|
||||
DOMAIN-SUFFIX,thepiratebay.org,Proxy
|
||||
DOMAIN-SUFFIX,theverge.com,Proxy
|
||||
DOMAIN-SUFFIX,time.com,Proxy
|
||||
DOMAIN-SUFFIX,timeinc.net,Proxy
|
||||
DOMAIN-SUFFIX,tiny.cc,Proxy
|
||||
DOMAIN-SUFFIX,tinypic.com,Proxy
|
||||
DOMAIN-SUFFIX,tmblr.co,Proxy
|
||||
DOMAIN-SUFFIX,todoist.com,Proxy
|
||||
DOMAIN-SUFFIX,trello.com,Proxy
|
||||
DOMAIN-SUFFIX,trustasiassl.com,Proxy
|
||||
DOMAIN-SUFFIX,tumblr.co,Proxy
|
||||
DOMAIN-SUFFIX,tumblr.com,Proxy
|
||||
DOMAIN-SUFFIX,tweetdeck.com,Proxy
|
||||
DOMAIN-SUFFIX,tweetmarker.net,Proxy
|
||||
DOMAIN-SUFFIX,twitch.tv,Proxy
|
||||
DOMAIN-SUFFIX,txmblr.com,Proxy
|
||||
DOMAIN-SUFFIX,typekit.net,Proxy
|
||||
DOMAIN-SUFFIX,ubertags.com,Proxy
|
||||
DOMAIN-SUFFIX,ublock.org,Proxy
|
||||
DOMAIN-SUFFIX,ubnt.com,Proxy
|
||||
DOMAIN-SUFFIX,ulyssesapp.com,Proxy
|
||||
DOMAIN-SUFFIX,urchin.com,Proxy
|
||||
DOMAIN-SUFFIX,usertrust.com,Proxy
|
||||
DOMAIN-SUFFIX,v.gd,Proxy
|
||||
DOMAIN-SUFFIX,v2ex.com,Proxy
|
||||
DOMAIN-SUFFIX,vimeo.com,Proxy
|
||||
DOMAIN-SUFFIX,vimeocdn.com,Proxy
|
||||
DOMAIN-SUFFIX,vine.co,Proxy
|
||||
DOMAIN-SUFFIX,vivaldi.com,Proxy
|
||||
DOMAIN-SUFFIX,vox-cdn.com,Proxy
|
||||
DOMAIN-SUFFIX,vsco.co,Proxy
|
||||
DOMAIN-SUFFIX,vultr.com,Proxy
|
||||
DOMAIN-SUFFIX,w.org,Proxy
|
||||
DOMAIN-SUFFIX,w3schools.com,Proxy
|
||||
DOMAIN-SUFFIX,webtype.com,Proxy
|
||||
DOMAIN-SUFFIX,wikiwand.com,Proxy
|
||||
DOMAIN-SUFFIX,wikileaks.org,Proxy
|
||||
DOMAIN-SUFFIX,wikimedia.org,Proxy
|
||||
DOMAIN-SUFFIX,wikipedia.com,Proxy
|
||||
DOMAIN-SUFFIX,wikipedia.org,Proxy
|
||||
DOMAIN-SUFFIX,windows.com,Proxy
|
||||
DOMAIN-SUFFIX,windows.net,Proxy
|
||||
DOMAIN-SUFFIX,wire.com,Proxy
|
||||
DOMAIN-SUFFIX,wordpress.com,Proxy
|
||||
DOMAIN-SUFFIX,workflowy.com,Proxy
|
||||
DOMAIN-SUFFIX,wp.com,Proxy
|
||||
DOMAIN-SUFFIX,wsj.com,Proxy
|
||||
DOMAIN-SUFFIX,wsj.net,Proxy
|
||||
DOMAIN-SUFFIX,xda-developers.com,Proxy
|
||||
DOMAIN-SUFFIX,xeeno.com,Proxy
|
||||
DOMAIN-SUFFIX,xiti.com,Proxy
|
||||
DOMAIN-SUFFIX,yahoo.com,Proxy
|
||||
DOMAIN-SUFFIX,yimg.com,Proxy
|
||||
DOMAIN-SUFFIX,ying.com,Proxy
|
||||
DOMAIN-SUFFIX,yoyo.org,Proxy
|
||||
DOMAIN-SUFFIX,ytimg.com,Proxy
|
||||
|
||||
# Telegram
|
||||
DOMAIN-SUFFIX,telegra.ph,Proxy
|
||||
DOMAIN-SUFFIX,telegram.org,Proxy
|
||||
|
||||
IP-CIDR,91.108.4.0/22,Proxy,no-resolve
|
||||
IP-CIDR,91.108.8.0/21,Proxy,no-resolve
|
||||
IP-CIDR,91.108.16.0/22,Proxy,no-resolve
|
||||
IP-CIDR,91.108.56.0/22,Proxy,no-resolve
|
||||
IP-CIDR,149.154.160.0/20,Proxy,no-resolve
|
||||
IP-CIDR6,2001:67c:4e8::/48,Proxy,no-resolve
|
||||
IP-CIDR6,2001:b28:f23d::/48,Proxy,no-resolve
|
||||
IP-CIDR6,2001:b28:f23f::/48,Proxy,no-resolve
|
||||
|
||||
# Google 中国服务 services.googleapis.cn
|
||||
IP-CIDR,120.232.181.162/32,Proxy,no-resolve
|
||||
IP-CIDR,120.241.147.226/32,Proxy,no-resolve
|
||||
IP-CIDR,120.253.253.226/32,Proxy,no-resolve
|
||||
IP-CIDR,120.253.255.162/32,Proxy,no-resolve
|
||||
IP-CIDR,120.253.255.34/32,Proxy,no-resolve
|
||||
IP-CIDR,120.253.255.98/32,Proxy,no-resolve
|
||||
IP-CIDR,180.163.150.162/32,Proxy,no-resolve
|
||||
IP-CIDR,180.163.150.34/32,Proxy,no-resolve
|
||||
IP-CIDR,180.163.151.162/32,Proxy,no-resolve
|
||||
IP-CIDR,180.163.151.34/32,Proxy,no-resolve
|
||||
IP-CIDR,203.208.39.0/24,Proxy,no-resolve
|
||||
IP-CIDR,203.208.40.0/24,Proxy,no-resolve
|
||||
IP-CIDR,203.208.41.0/24,Proxy,no-resolve
|
||||
IP-CIDR,203.208.43.0/24,Proxy,no-resolve
|
||||
IP-CIDR,203.208.50.0/24,Proxy,no-resolve
|
||||
IP-CIDR,220.181.174.162/32,Proxy,no-resolve
|
||||
IP-CIDR,220.181.174.226/32,Proxy,no-resolve
|
||||
IP-CIDR,220.181.174.34/32,Proxy,no-resolve
|
||||
|
||||
# LAN
|
||||
DOMAIN-SUFFIX,local,DIRECT
|
||||
IP-CIDR,127.0.0.0/8,DIRECT
|
||||
IP-CIDR,172.16.0.0/12,DIRECT
|
||||
IP-CIDR,192.168.0.0/16,DIRECT
|
||||
IP-CIDR,10.0.0.0/8,DIRECT
|
||||
IP-CIDR,17.0.0.0/8,DIRECT
|
||||
IP-CIDR,100.64.0.0/10,DIRECT
|
||||
IP-CIDR,224.0.0.0/4,DIRECT
|
||||
IP-CIDR6,fe80::/10,DIRECT
|
||||
|
||||
# 剩余未匹配的国内网站
|
||||
DOMAIN-SUFFIX,cn,DIRECT
|
||||
DOMAIN-KEYWORD,-cn,DIRECT
|
||||
|
||||
# 最终规则
|
||||
GEOIP,CN,DIRECT
|
||||
FINAL,Proxy
|
||||
595
submodule/surge.toml
Normal file
595
submodule/surge.toml
Normal file
@@ -0,0 +1,595 @@
|
||||
#!MANAGED-CONFIG $subs_link interval=43200 strict=true
|
||||
# Surge 的规则配置手册: https://manual.nssurge.com/
|
||||
# Thanks @Hackl0us SS-Rule-Snippet
|
||||
|
||||
[General]
|
||||
loglevel = notify
|
||||
# 从 Surge iOS 4 / Surge Mac 3.3.0 起,工具开始支持 DoH
|
||||
doh-server = https://doh.pub/dns-query
|
||||
# https://dns.alidns.com/dns-query, https://13800000000.rubyfish.cn/, https://dns.google/dns-query
|
||||
dns-server = 223.5.5.5, 114.114.114.114
|
||||
tun-excluded-routes = 0.0.0.0/8, 10.0.0.0/8, 100.64.0.0/10, 127.0.0.0/8, 169.254.0.0/16, 172.16.0.0/12, 192.0.0.0/24, 192.0.2.0/24, 192.168.0.0/16, 192.88.99.0/24, 198.51.100.0/24, 203.0.113.0/24, 224.0.0.0/4, 255.255.255.255/32
|
||||
skip-proxy = localhost, *.local, injections.adguard.org, local.adguard.org, captive.apple.com, guzzoni.apple.com, 0.0.0.0/8, 10.0.0.0/8, 17.0.0.0/8, 100.64.0.0/10, 127.0.0.0/8, 169.254.0.0/16, 172.16.0.0/12, 192.0.0.0/24, 192.0.2.0/24, 192.168.0.0/16, 192.88.99.0/24, 198.18.0.0/15, 198.51.100.0/24, 203.0.113.0/24, 224.0.0.0/4, 240.0.0.0/4, 255.255.255.255/32
|
||||
|
||||
wifi-assist = true
|
||||
allow-wifi-access = true
|
||||
wifi-access-http-port = 6152
|
||||
wifi-access-socks5-port = 6153
|
||||
http-listen = 0.0.0.0:6152
|
||||
socks5-listen = 0.0.0.0:6153
|
||||
|
||||
external-controller-access = surgepasswd@0.0.0.0:6170
|
||||
replica = false
|
||||
|
||||
tls-provider = openssl
|
||||
network-framework = false
|
||||
exclude-simple-hostnames = true
|
||||
ipv6 = true
|
||||
|
||||
test-timeout = 4
|
||||
proxy-test-url = http://www.gstatic.com/generate_204
|
||||
geoip-maxmind-url = https://unpkg.zhimg.com/rulestatic@1.0.1/Country.mmdb
|
||||
|
||||
[Replica]
|
||||
hide-apple-request = true
|
||||
hide-crashlytics-request = true
|
||||
use-keyword-filter = false
|
||||
hide-udp = false
|
||||
|
||||
[Panel]
|
||||
SubscribeInfo = $subscribe_info, style=info
|
||||
|
||||
# -----------------------------
|
||||
# Surge 的几种策略配置规范,请参考 https://manual.nssurge.com/policy/proxy.html
|
||||
# 不同的代理策略有*很多*可选参数,请参考上方连接的 Parameters 一段,根据需求自行添加参数。
|
||||
#
|
||||
# Surge 现已支持 UDP 转发功能,请参考: https://trello.com/c/ugOMxD3u/53-udp-%E8%BD%AC%E5%8F%91
|
||||
# Surge 现已支持 TCP-Fast-Open 技术,请参考: https://trello.com/c/ij65BU6Q/48-tcp-fast-open-troubleshooting-guide
|
||||
# Surge 现已支持 ss-libev 的全部加密方式和混淆,请参考: https://trello.com/c/BTr0vG1O/47-ss-libev-%E7%9A%84%E6%94%AF%E6%8C%81%E6%83%85%E5%86%B5
|
||||
# -----------------------------
|
||||
|
||||
[Proxy]
|
||||
$proxies
|
||||
|
||||
[Proxy Group]
|
||||
Proxy = select, auto, fallback, $proxy_group
|
||||
auto = url-test, $proxy_group, url=http://www.gstatic.com/generate_204, interval=43200
|
||||
fallback = fallback, $proxy_group, url=http://www.gstatic.com/generate_204, interval=43200
|
||||
|
||||
[Rule]
|
||||
# 自定义规则
|
||||
## 您可以在此处插入自定义规则
|
||||
|
||||
# 强制订阅域名直连
|
||||
DOMAIN,$subs_domain,DIRECT
|
||||
|
||||
# Google 中国服务
|
||||
DOMAIN-SUFFIX,services.googleapis.cn,Proxy
|
||||
DOMAIN-SUFFIX,xn--ngstr-lra8j.com,Proxy
|
||||
|
||||
# Apple
|
||||
DOMAIN,developer.apple.com,Proxy
|
||||
DOMAIN-SUFFIX,digicert.com,Proxy
|
||||
USER-AGENT,com.apple.trustd*,Proxy
|
||||
DOMAIN-SUFFIX,apple-dns.net,Proxy
|
||||
DOMAIN,testflight.apple.com,Proxy
|
||||
DOMAIN,sandbox.itunes.apple.com,Proxy
|
||||
DOMAIN,itunes.apple.com,Proxy
|
||||
DOMAIN-SUFFIX,apps.apple.com,Proxy
|
||||
DOMAIN-SUFFIX,blobstore.apple.com,Proxy
|
||||
DOMAIN,cvws.icloud-content.com,Proxy
|
||||
DOMAIN,safebrowsing.urlsec.qq.com,DIRECT
|
||||
DOMAIN,safebrowsing.googleapis.com,DIRECT
|
||||
USER-AGENT,com.apple.appstored*,DIRECT
|
||||
USER-AGENT,AppStore*,DIRECT
|
||||
DOMAIN-SUFFIX,mzstatic.com,DIRECT
|
||||
DOMAIN-SUFFIX,itunes.apple.com,DIRECT
|
||||
DOMAIN-SUFFIX,icloud.com,DIRECT
|
||||
DOMAIN-SUFFIX,icloud-content.com,DIRECT
|
||||
USER-AGENT,cloudd*,DIRECT
|
||||
USER-AGENT,*com.apple.WebKit*,DIRECT
|
||||
USER-AGENT,*com.apple.*,DIRECT
|
||||
DOMAIN-SUFFIX,me.com,DIRECT
|
||||
DOMAIN-SUFFIX,aaplimg.com,DIRECT
|
||||
DOMAIN-SUFFIX,cdn20.com,DIRECT
|
||||
DOMAIN-SUFFIX,cdn-apple.com,DIRECT
|
||||
DOMAIN-SUFFIX,akadns.net,DIRECT
|
||||
DOMAIN-SUFFIX,akamaiedge.net,DIRECT
|
||||
DOMAIN-SUFFIX,edgekey.net,DIRECT
|
||||
DOMAIN-SUFFIX,mwcloudcdn.com,DIRECT
|
||||
DOMAIN-SUFFIX,mwcname.com,DIRECT
|
||||
DOMAIN-SUFFIX,apple.com,DIRECT
|
||||
DOMAIN-SUFFIX,apple-cloudkit.com,DIRECT
|
||||
DOMAIN-SUFFIX,apple-mapkit.com,DIRECT
|
||||
|
||||
# 国内网站
|
||||
USER-AGENT,MicroMessenger Client*,DIRECT
|
||||
USER-AGENT,WeChat*,DIRECT
|
||||
|
||||
DOMAIN-SUFFIX,126.com,DIRECT
|
||||
DOMAIN-SUFFIX,126.net,DIRECT
|
||||
DOMAIN-SUFFIX,127.net,DIRECT
|
||||
DOMAIN-SUFFIX,163.com,DIRECT
|
||||
DOMAIN-SUFFIX,360buyimg.com,DIRECT
|
||||
DOMAIN-SUFFIX,36kr.com,DIRECT
|
||||
DOMAIN-SUFFIX,acfun.tv,DIRECT
|
||||
DOMAIN-SUFFIX,air-matters.com,DIRECT
|
||||
DOMAIN-SUFFIX,aixifan.com,DIRECT
|
||||
DOMAIN-KEYWORD,alicdn,DIRECT
|
||||
DOMAIN-KEYWORD,alipay,DIRECT
|
||||
DOMAIN-KEYWORD,aliyun,DIRECT
|
||||
DOMAIN-KEYWORD,taobao,DIRECT
|
||||
DOMAIN-SUFFIX,amap.com,DIRECT
|
||||
DOMAIN-SUFFIX,autonavi.com,DIRECT
|
||||
DOMAIN-KEYWORD,baidu,DIRECT
|
||||
DOMAIN-SUFFIX,bdimg.com,DIRECT
|
||||
DOMAIN-SUFFIX,bdstatic.com,DIRECT
|
||||
DOMAIN-SUFFIX,bilibili.com,DIRECT
|
||||
DOMAIN-SUFFIX,bilivideo.com,DIRECT
|
||||
DOMAIN-SUFFIX,caiyunapp.com,DIRECT
|
||||
DOMAIN-SUFFIX,clouddn.com,DIRECT
|
||||
DOMAIN-SUFFIX,cnbeta.com,DIRECT
|
||||
DOMAIN-SUFFIX,cnbetacdn.com,DIRECT
|
||||
DOMAIN-SUFFIX,cootekservice.com,DIRECT
|
||||
DOMAIN-SUFFIX,csdn.net,DIRECT
|
||||
DOMAIN-SUFFIX,ctrip.com,DIRECT
|
||||
DOMAIN-SUFFIX,dgtle.com,DIRECT
|
||||
DOMAIN-SUFFIX,dianping.com,DIRECT
|
||||
DOMAIN-SUFFIX,douban.com,DIRECT
|
||||
DOMAIN-SUFFIX,doubanio.com,DIRECT
|
||||
DOMAIN-SUFFIX,duokan.com,DIRECT
|
||||
DOMAIN-SUFFIX,easou.com,DIRECT
|
||||
DOMAIN-SUFFIX,ele.me,DIRECT
|
||||
DOMAIN-SUFFIX,feng.com,DIRECT
|
||||
DOMAIN-SUFFIX,fir.im,DIRECT
|
||||
DOMAIN-SUFFIX,frdic.com,DIRECT
|
||||
DOMAIN-SUFFIX,g-cores.com,DIRECT
|
||||
DOMAIN-SUFFIX,godic.net,DIRECT
|
||||
DOMAIN-SUFFIX,gtimg.com,DIRECT
|
||||
DOMAIN-SUFFIX,hongxiu.com,DIRECT
|
||||
DOMAIN-SUFFIX,hxcdn.net,DIRECT
|
||||
DOMAIN-SUFFIX,iciba.com,DIRECT
|
||||
DOMAIN-SUFFIX,ifeng.com,DIRECT
|
||||
DOMAIN-SUFFIX,ifengimg.com,DIRECT
|
||||
DOMAIN-SUFFIX,ipip.net,DIRECT
|
||||
DOMAIN-SUFFIX,iqiyi.com,DIRECT
|
||||
DOMAIN-SUFFIX,jd.com,DIRECT
|
||||
DOMAIN-SUFFIX,jianshu.com,DIRECT
|
||||
DOMAIN-SUFFIX,knewone.com,DIRECT
|
||||
DOMAIN-SUFFIX,le.com,DIRECT
|
||||
DOMAIN-SUFFIX,lecloud.com,DIRECT
|
||||
DOMAIN-SUFFIX,lemicp.com,DIRECT
|
||||
DOMAIN-SUFFIX,licdn.com,DIRECT
|
||||
DOMAIN-SUFFIX,luoo.net,DIRECT
|
||||
DOMAIN-SUFFIX,meituan.com,DIRECT
|
||||
DOMAIN-SUFFIX,meituan.net,DIRECT
|
||||
DOMAIN-SUFFIX,mi.com,DIRECT
|
||||
DOMAIN-SUFFIX,miaopai.com,DIRECT
|
||||
DOMAIN-SUFFIX,microsoft.com,DIRECT
|
||||
DOMAIN-SUFFIX,microsoftonline.com,DIRECT
|
||||
DOMAIN-SUFFIX,miui.com,DIRECT
|
||||
DOMAIN-SUFFIX,miwifi.com,DIRECT
|
||||
DOMAIN-SUFFIX,mob.com,DIRECT
|
||||
DOMAIN-SUFFIX,netease.com,DIRECT
|
||||
DOMAIN-SUFFIX,office.com,DIRECT
|
||||
DOMAIN-KEYWORD,officecdn,DIRECT
|
||||
DOMAIN-SUFFIX,office365.com,DIRECT
|
||||
DOMAIN-SUFFIX,oschina.net,DIRECT
|
||||
DOMAIN-SUFFIX,ppsimg.com,DIRECT
|
||||
DOMAIN-SUFFIX,pstatp.com,DIRECT
|
||||
DOMAIN-SUFFIX,qcloud.com,DIRECT
|
||||
DOMAIN-SUFFIX,qdaily.com,DIRECT
|
||||
DOMAIN-SUFFIX,qdmm.com,DIRECT
|
||||
DOMAIN-SUFFIX,qhimg.com,DIRECT
|
||||
DOMAIN-SUFFIX,qhres.com,DIRECT
|
||||
DOMAIN-SUFFIX,qidian.com,DIRECT
|
||||
DOMAIN-SUFFIX,qihucdn.com,DIRECT
|
||||
DOMAIN-SUFFIX,qiniu.com,DIRECT
|
||||
DOMAIN-SUFFIX,qiniucdn.com,DIRECT
|
||||
DOMAIN-SUFFIX,qiyipic.com,DIRECT
|
||||
DOMAIN-SUFFIX,qq.com,DIRECT
|
||||
DOMAIN-SUFFIX,qqurl.com,DIRECT
|
||||
DOMAIN-SUFFIX,rarbg.to,DIRECT
|
||||
DOMAIN-SUFFIX,ruguoapp.com,DIRECT
|
||||
DOMAIN-SUFFIX,segmentfault.com,DIRECT
|
||||
DOMAIN-SUFFIX,sinaapp.com,DIRECT
|
||||
DOMAIN-SUFFIX,smzdm.com,DIRECT
|
||||
DOMAIN-SUFFIX,snapdrop.net,DIRECT
|
||||
DOMAIN-SUFFIX,sogou.com,DIRECT
|
||||
DOMAIN-SUFFIX,sogoucdn.com,DIRECT
|
||||
DOMAIN-SUFFIX,sohu.com,DIRECT
|
||||
DOMAIN-SUFFIX,soku.com,DIRECT
|
||||
DOMAIN-SUFFIX,speedtest.net,DIRECT
|
||||
DOMAIN-SUFFIX,sspai.com,DIRECT
|
||||
DOMAIN-SUFFIX,suning.com,DIRECT
|
||||
DOMAIN-SUFFIX,taobao.com,DIRECT
|
||||
DOMAIN-SUFFIX,tencent.com,DIRECT
|
||||
DOMAIN-SUFFIX,tenpay.com,DIRECT
|
||||
DOMAIN-SUFFIX,tianyancha.com,DIRECT
|
||||
DOMAIN-KEYWORD,.tmall.com,DIRECT
|
||||
DOMAIN-SUFFIX,tudou.com,DIRECT
|
||||
DOMAIN-SUFFIX,umetrip.com,DIRECT
|
||||
DOMAIN-SUFFIX,upaiyun.com,DIRECT
|
||||
DOMAIN-SUFFIX,upyun.com,DIRECT
|
||||
DOMAIN-SUFFIX,veryzhun.com,DIRECT
|
||||
DOMAIN-SUFFIX,weather.com,DIRECT
|
||||
DOMAIN-SUFFIX,weibo.com,DIRECT
|
||||
DOMAIN-SUFFIX,xiami.com,DIRECT
|
||||
DOMAIN-SUFFIX,xiami.net,DIRECT
|
||||
DOMAIN-SUFFIX,xiaomicp.com,DIRECT
|
||||
DOMAIN-SUFFIX,ximalaya.com,DIRECT
|
||||
DOMAIN-SUFFIX,xmcdn.com,DIRECT
|
||||
DOMAIN-SUFFIX,xunlei.com,DIRECT
|
||||
DOMAIN-SUFFIX,yhd.com,DIRECT
|
||||
DOMAIN-SUFFIX,yihaodianimg.com,DIRECT
|
||||
DOMAIN-SUFFIX,yinxiang.com,DIRECT
|
||||
DOMAIN-SUFFIX,ykimg.com,DIRECT
|
||||
DOMAIN-SUFFIX,youdao.com,DIRECT
|
||||
DOMAIN-SUFFIX,youku.com,DIRECT
|
||||
DOMAIN-SUFFIX,zealer.com,DIRECT
|
||||
DOMAIN-SUFFIX,zhihu.com,DIRECT
|
||||
DOMAIN-SUFFIX,zhimg.com,DIRECT
|
||||
DOMAIN-SUFFIX,zimuzu.tv,DIRECT
|
||||
DOMAIN-SUFFIX,zoho.com,DIRECT
|
||||
|
||||
# 常见广告
|
||||
DOMAIN-KEYWORD,admarvel,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,admaster,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,adsage,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,adsmogo,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,adsrvmedia,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,adwords,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,adservice,REJECT-TINYGIF
|
||||
DOMAIN-SUFFIX,appsflyer.com,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,domob,REJECT-TINYGIF
|
||||
DOMAIN-SUFFIX,doubleclick.net,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,duomeng,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,dwtrack,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,guanggao,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,lianmeng,REJECT-TINYGIF
|
||||
DOMAIN-SUFFIX,mmstat.com,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,mopub,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,omgmta,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,openx,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,partnerad,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,pingfore,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,supersonicads,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,uedas,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,umeng,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,usage,REJECT-TINYGIF
|
||||
DOMAIN-SUFFIX,vungle.com,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,wlmonitor,REJECT-TINYGIF
|
||||
DOMAIN-KEYWORD,zjtoolbar,REJECT-TINYGIF
|
||||
|
||||
## 抗 DNS 污染
|
||||
DOMAIN-KEYWORD,amazon,Proxy
|
||||
DOMAIN-KEYWORD,google,Proxy
|
||||
DOMAIN-KEYWORD,gmail,Proxy
|
||||
DOMAIN-KEYWORD,youtube,Proxy
|
||||
DOMAIN-KEYWORD,facebook,Proxy
|
||||
DOMAIN-SUFFIX,fb.me,Proxy
|
||||
DOMAIN-SUFFIX,fbcdn.net,Proxy
|
||||
DOMAIN-KEYWORD,twitter,Proxy
|
||||
DOMAIN-KEYWORD,instagram,Proxy
|
||||
DOMAIN-KEYWORD,dropbox,Proxy
|
||||
DOMAIN-SUFFIX,twimg.com,Proxy
|
||||
DOMAIN-KEYWORD,blogspot,Proxy
|
||||
DOMAIN-SUFFIX,youtu.be,Proxy
|
||||
|
||||
## 常见国外域名列表
|
||||
DOMAIN-SUFFIX,9to5mac.com,Proxy
|
||||
DOMAIN-SUFFIX,abpchina.org,Proxy
|
||||
DOMAIN-SUFFIX,adblockplus.org,Proxy
|
||||
DOMAIN-SUFFIX,adobe.com,Proxy
|
||||
DOMAIN-SUFFIX,akamaized.net,Proxy
|
||||
DOMAIN-SUFFIX,alfredapp.com,Proxy
|
||||
DOMAIN-SUFFIX,amplitude.com,Proxy
|
||||
DOMAIN-SUFFIX,ampproject.org,Proxy
|
||||
DOMAIN-SUFFIX,android.com,Proxy
|
||||
DOMAIN-SUFFIX,angularjs.org,Proxy
|
||||
DOMAIN-SUFFIX,aolcdn.com,Proxy
|
||||
DOMAIN-SUFFIX,apkpure.com,Proxy
|
||||
DOMAIN-SUFFIX,appledaily.com,Proxy
|
||||
DOMAIN-SUFFIX,appshopper.com,Proxy
|
||||
DOMAIN-SUFFIX,appspot.com,Proxy
|
||||
DOMAIN-SUFFIX,arcgis.com,Proxy
|
||||
DOMAIN-SUFFIX,archive.org,Proxy
|
||||
DOMAIN-SUFFIX,armorgames.com,Proxy
|
||||
DOMAIN-SUFFIX,aspnetcdn.com,Proxy
|
||||
DOMAIN-SUFFIX,att.com,Proxy
|
||||
DOMAIN-SUFFIX,awsstatic.com,Proxy
|
||||
DOMAIN-SUFFIX,azureedge.net,Proxy
|
||||
DOMAIN-SUFFIX,azurewebsites.net,Proxy
|
||||
DOMAIN-SUFFIX,bing.com,Proxy
|
||||
DOMAIN-SUFFIX,bintray.com,Proxy
|
||||
DOMAIN-SUFFIX,bit.com,Proxy
|
||||
DOMAIN-SUFFIX,bit.ly,Proxy
|
||||
DOMAIN-SUFFIX,bitbucket.org,Proxy
|
||||
DOMAIN-SUFFIX,bjango.com,Proxy
|
||||
DOMAIN-SUFFIX,bkrtx.com,Proxy
|
||||
DOMAIN-SUFFIX,blog.com,Proxy
|
||||
DOMAIN-SUFFIX,blogcdn.com,Proxy
|
||||
DOMAIN-SUFFIX,blogger.com,Proxy
|
||||
DOMAIN-SUFFIX,blogsmithmedia.com,Proxy
|
||||
DOMAIN-SUFFIX,blogspot.com,Proxy
|
||||
DOMAIN-SUFFIX,blogspot.hk,Proxy
|
||||
DOMAIN-SUFFIX,bloomberg.com,Proxy
|
||||
DOMAIN-SUFFIX,box.com,Proxy
|
||||
DOMAIN-SUFFIX,box.net,Proxy
|
||||
DOMAIN-SUFFIX,cachefly.net,Proxy
|
||||
DOMAIN-SUFFIX,chromium.org,Proxy
|
||||
DOMAIN-SUFFIX,cl.ly,Proxy
|
||||
DOMAIN-SUFFIX,cloudflare.com,Proxy
|
||||
DOMAIN-SUFFIX,cloudfront.net,Proxy
|
||||
DOMAIN-SUFFIX,cloudmagic.com,Proxy
|
||||
DOMAIN-SUFFIX,cmail19.com,Proxy
|
||||
DOMAIN-SUFFIX,cnet.com,Proxy
|
||||
DOMAIN-SUFFIX,cocoapods.org,Proxy
|
||||
DOMAIN-SUFFIX,comodoca.com,Proxy
|
||||
DOMAIN-SUFFIX,crashlytics.com,Proxy
|
||||
DOMAIN-SUFFIX,culturedcode.com,Proxy
|
||||
DOMAIN-SUFFIX,d.pr,Proxy
|
||||
DOMAIN-SUFFIX,danilo.to,Proxy
|
||||
DOMAIN-SUFFIX,dayone.me,Proxy
|
||||
DOMAIN-SUFFIX,db.tt,Proxy
|
||||
DOMAIN-SUFFIX,deskconnect.com,Proxy
|
||||
DOMAIN-SUFFIX,disq.us,Proxy
|
||||
DOMAIN-SUFFIX,disqus.com,Proxy
|
||||
DOMAIN-SUFFIX,disquscdn.com,Proxy
|
||||
DOMAIN-SUFFIX,dnsimple.com,Proxy
|
||||
DOMAIN-SUFFIX,docker.com,Proxy
|
||||
DOMAIN-SUFFIX,dribbble.com,Proxy
|
||||
DOMAIN-SUFFIX,droplr.com,Proxy
|
||||
DOMAIN-SUFFIX,duckduckgo.com,Proxy
|
||||
DOMAIN-SUFFIX,dueapp.com,Proxy
|
||||
DOMAIN-SUFFIX,dytt8.net,Proxy
|
||||
DOMAIN-SUFFIX,edgecastcdn.net,Proxy
|
||||
DOMAIN-SUFFIX,edgekey.net,Proxy
|
||||
DOMAIN-SUFFIX,edgesuite.net,Proxy
|
||||
DOMAIN-SUFFIX,engadget.com,Proxy
|
||||
DOMAIN-SUFFIX,entrust.net,Proxy
|
||||
DOMAIN-SUFFIX,eurekavpt.com,Proxy
|
||||
DOMAIN-SUFFIX,evernote.com,Proxy
|
||||
DOMAIN-SUFFIX,fabric.io,Proxy
|
||||
DOMAIN-SUFFIX,fast.com,Proxy
|
||||
DOMAIN-SUFFIX,fastly.net,Proxy
|
||||
DOMAIN-SUFFIX,fc2.com,Proxy
|
||||
DOMAIN-SUFFIX,feedburner.com,Proxy
|
||||
DOMAIN-SUFFIX,feedly.com,Proxy
|
||||
DOMAIN-SUFFIX,feedsportal.com,Proxy
|
||||
DOMAIN-SUFFIX,fiftythree.com,Proxy
|
||||
DOMAIN-SUFFIX,firebaseio.com,Proxy
|
||||
DOMAIN-SUFFIX,flexibits.com,Proxy
|
||||
DOMAIN-SUFFIX,flickr.com,Proxy
|
||||
DOMAIN-SUFFIX,flipboard.com,Proxy
|
||||
DOMAIN-SUFFIX,g.co,Proxy
|
||||
DOMAIN-SUFFIX,gabia.net,Proxy
|
||||
DOMAIN-SUFFIX,geni.us,Proxy
|
||||
DOMAIN-SUFFIX,gfx.ms,Proxy
|
||||
DOMAIN-SUFFIX,ggpht.com,Proxy
|
||||
DOMAIN-SUFFIX,ghostnoteapp.com,Proxy
|
||||
DOMAIN-SUFFIX,git.io,Proxy
|
||||
DOMAIN-KEYWORD,github,Proxy
|
||||
DOMAIN-SUFFIX,globalsign.com,Proxy
|
||||
DOMAIN-SUFFIX,gmodules.com,Proxy
|
||||
DOMAIN-SUFFIX,godaddy.com,Proxy
|
||||
DOMAIN-SUFFIX,golang.org,Proxy
|
||||
DOMAIN-SUFFIX,gongm.in,Proxy
|
||||
DOMAIN-SUFFIX,goo.gl,Proxy
|
||||
DOMAIN-SUFFIX,goodreaders.com,Proxy
|
||||
DOMAIN-SUFFIX,goodreads.com,Proxy
|
||||
DOMAIN-SUFFIX,gravatar.com,Proxy
|
||||
DOMAIN-SUFFIX,gstatic.com,Proxy
|
||||
DOMAIN-SUFFIX,gvt0.com,Proxy
|
||||
DOMAIN-SUFFIX,hockeyapp.net,Proxy
|
||||
DOMAIN-SUFFIX,hotmail.com,Proxy
|
||||
DOMAIN-SUFFIX,icons8.com,Proxy
|
||||
DOMAIN-SUFFIX,ifixit.com,Proxy
|
||||
DOMAIN-SUFFIX,ift.tt,Proxy
|
||||
DOMAIN-SUFFIX,ifttt.com,Proxy
|
||||
DOMAIN-SUFFIX,iherb.com,Proxy
|
||||
DOMAIN-SUFFIX,imageshack.us,Proxy
|
||||
DOMAIN-SUFFIX,img.ly,Proxy
|
||||
DOMAIN-SUFFIX,imgur.com,Proxy
|
||||
DOMAIN-SUFFIX,imore.com,Proxy
|
||||
DOMAIN-SUFFIX,instapaper.com,Proxy
|
||||
DOMAIN-SUFFIX,ipn.li,Proxy
|
||||
DOMAIN-SUFFIX,is.gd,Proxy
|
||||
DOMAIN-SUFFIX,issuu.com,Proxy
|
||||
DOMAIN-SUFFIX,itgonglun.com,Proxy
|
||||
DOMAIN-SUFFIX,itun.es,Proxy
|
||||
DOMAIN-SUFFIX,ixquick.com,Proxy
|
||||
DOMAIN-SUFFIX,j.mp,Proxy
|
||||
DOMAIN-SUFFIX,js.revsci.net,Proxy
|
||||
DOMAIN-SUFFIX,jshint.com,Proxy
|
||||
DOMAIN-SUFFIX,jtvnw.net,Proxy
|
||||
DOMAIN-SUFFIX,justgetflux.com,Proxy
|
||||
DOMAIN-SUFFIX,kat.cr,Proxy
|
||||
DOMAIN-SUFFIX,klip.me,Proxy
|
||||
DOMAIN-SUFFIX,libsyn.com,Proxy
|
||||
DOMAIN-SUFFIX,linkedin.com,Proxy
|
||||
DOMAIN-SUFFIX,line-apps.com,Proxy
|
||||
DOMAIN-SUFFIX,linode.com,Proxy
|
||||
DOMAIN-SUFFIX,lithium.com,Proxy
|
||||
DOMAIN-SUFFIX,littlehj.com,Proxy
|
||||
DOMAIN-SUFFIX,live.com,Proxy
|
||||
DOMAIN-SUFFIX,live.net,Proxy
|
||||
DOMAIN-SUFFIX,livefilestore.com,Proxy
|
||||
DOMAIN-SUFFIX,llnwd.net,Proxy
|
||||
DOMAIN-SUFFIX,macid.co,Proxy
|
||||
DOMAIN-SUFFIX,macromedia.com,Proxy
|
||||
DOMAIN-SUFFIX,macrumors.com,Proxy
|
||||
DOMAIN-SUFFIX,mashable.com,Proxy
|
||||
DOMAIN-SUFFIX,mathjax.org,Proxy
|
||||
DOMAIN-SUFFIX,medium.com,Proxy
|
||||
DOMAIN-SUFFIX,mega.co.nz,Proxy
|
||||
DOMAIN-SUFFIX,mega.nz,Proxy
|
||||
DOMAIN-SUFFIX,megaupload.com,Proxy
|
||||
DOMAIN-SUFFIX,microsofttranslator.com,Proxy
|
||||
DOMAIN-SUFFIX,mindnode.com,Proxy
|
||||
DOMAIN-SUFFIX,mobile01.com,Proxy
|
||||
DOMAIN-SUFFIX,modmyi.com,Proxy
|
||||
DOMAIN-SUFFIX,msedge.net,Proxy
|
||||
DOMAIN-SUFFIX,myfontastic.com,Proxy
|
||||
DOMAIN-SUFFIX,name.com,Proxy
|
||||
DOMAIN-SUFFIX,nextmedia.com,Proxy
|
||||
DOMAIN-SUFFIX,nsstatic.net,Proxy
|
||||
DOMAIN-SUFFIX,nssurge.com,Proxy
|
||||
DOMAIN-SUFFIX,nyt.com,Proxy
|
||||
DOMAIN-SUFFIX,nytimes.com,Proxy
|
||||
DOMAIN-SUFFIX,omnigroup.com,Proxy
|
||||
DOMAIN-SUFFIX,onedrive.com,Proxy
|
||||
DOMAIN-SUFFIX,onenote.com,Proxy
|
||||
DOMAIN-SUFFIX,ooyala.com,Proxy
|
||||
DOMAIN-SUFFIX,openvpn.net,Proxy
|
||||
DOMAIN-SUFFIX,openwrt.org,Proxy
|
||||
DOMAIN-SUFFIX,orkut.com,Proxy
|
||||
DOMAIN-SUFFIX,osxdaily.com,Proxy
|
||||
DOMAIN-SUFFIX,outlook.com,Proxy
|
||||
DOMAIN-SUFFIX,ow.ly,Proxy
|
||||
DOMAIN-SUFFIX,paddleapi.com,Proxy
|
||||
DOMAIN-SUFFIX,parallels.com,Proxy
|
||||
DOMAIN-SUFFIX,parse.com,Proxy
|
||||
DOMAIN-SUFFIX,pdfexpert.com,Proxy
|
||||
DOMAIN-SUFFIX,periscope.tv,Proxy
|
||||
DOMAIN-SUFFIX,pinboard.in,Proxy
|
||||
DOMAIN-SUFFIX,pinterest.com,Proxy
|
||||
DOMAIN-SUFFIX,pixelmator.com,Proxy
|
||||
DOMAIN-SUFFIX,pixiv.net,Proxy
|
||||
DOMAIN-SUFFIX,playpcesor.com,Proxy
|
||||
DOMAIN-SUFFIX,playstation.com,Proxy
|
||||
DOMAIN-SUFFIX,playstation.com.hk,Proxy
|
||||
DOMAIN-SUFFIX,playstation.net,Proxy
|
||||
DOMAIN-SUFFIX,playstationnetwork.com,Proxy
|
||||
DOMAIN-SUFFIX,pushwoosh.com,Proxy
|
||||
DOMAIN-SUFFIX,rime.im,Proxy
|
||||
DOMAIN-SUFFIX,servebom.com,Proxy
|
||||
DOMAIN-SUFFIX,sfx.ms,Proxy
|
||||
DOMAIN-SUFFIX,shadowsocks.org,Proxy
|
||||
DOMAIN-SUFFIX,sharethis.com,Proxy
|
||||
DOMAIN-SUFFIX,shazam.com,Proxy
|
||||
DOMAIN-SUFFIX,skype.com,Proxy
|
||||
DOMAIN-SUFFIX,smartdnsProxy.com,Proxy
|
||||
DOMAIN-SUFFIX,smartmailcloud.com,Proxy
|
||||
DOMAIN-SUFFIX,sndcdn.com,Proxy
|
||||
DOMAIN-SUFFIX,sony.com,Proxy
|
||||
DOMAIN-SUFFIX,soundcloud.com,Proxy
|
||||
DOMAIN-SUFFIX,sourceforge.net,Proxy
|
||||
DOMAIN-SUFFIX,spotify.com,Proxy
|
||||
DOMAIN-SUFFIX,squarespace.com,Proxy
|
||||
DOMAIN-SUFFIX,sstatic.net,Proxy
|
||||
DOMAIN-SUFFIX,st.luluku.pw,Proxy
|
||||
DOMAIN-SUFFIX,stackoverflow.com,Proxy
|
||||
DOMAIN-SUFFIX,startpage.com,Proxy
|
||||
DOMAIN-SUFFIX,staticflickr.com,Proxy
|
||||
DOMAIN-SUFFIX,steamcommunity.com,Proxy
|
||||
DOMAIN-SUFFIX,symauth.com,Proxy
|
||||
DOMAIN-SUFFIX,symcb.com,Proxy
|
||||
DOMAIN-SUFFIX,symcd.com,Proxy
|
||||
DOMAIN-SUFFIX,tapbots.com,Proxy
|
||||
DOMAIN-SUFFIX,tapbots.net,Proxy
|
||||
DOMAIN-SUFFIX,tdesktop.com,Proxy
|
||||
DOMAIN-SUFFIX,techcrunch.com,Proxy
|
||||
DOMAIN-SUFFIX,techsmith.com,Proxy
|
||||
DOMAIN-SUFFIX,thepiratebay.org,Proxy
|
||||
DOMAIN-SUFFIX,theverge.com,Proxy
|
||||
DOMAIN-SUFFIX,time.com,Proxy
|
||||
DOMAIN-SUFFIX,timeinc.net,Proxy
|
||||
DOMAIN-SUFFIX,tiny.cc,Proxy
|
||||
DOMAIN-SUFFIX,tinypic.com,Proxy
|
||||
DOMAIN-SUFFIX,tmblr.co,Proxy
|
||||
DOMAIN-SUFFIX,todoist.com,Proxy
|
||||
DOMAIN-SUFFIX,trello.com,Proxy
|
||||
DOMAIN-SUFFIX,trustasiassl.com,Proxy
|
||||
DOMAIN-SUFFIX,tumblr.co,Proxy
|
||||
DOMAIN-SUFFIX,tumblr.com,Proxy
|
||||
DOMAIN-SUFFIX,tweetdeck.com,Proxy
|
||||
DOMAIN-SUFFIX,tweetmarker.net,Proxy
|
||||
DOMAIN-SUFFIX,twitch.tv,Proxy
|
||||
DOMAIN-SUFFIX,txmblr.com,Proxy
|
||||
DOMAIN-SUFFIX,typekit.net,Proxy
|
||||
DOMAIN-SUFFIX,ubertags.com,Proxy
|
||||
DOMAIN-SUFFIX,ublock.org,Proxy
|
||||
DOMAIN-SUFFIX,ubnt.com,Proxy
|
||||
DOMAIN-SUFFIX,ulyssesapp.com,Proxy
|
||||
DOMAIN-SUFFIX,urchin.com,Proxy
|
||||
DOMAIN-SUFFIX,usertrust.com,Proxy
|
||||
DOMAIN-SUFFIX,v.gd,Proxy
|
||||
DOMAIN-SUFFIX,v2ex.com,Proxy
|
||||
DOMAIN-SUFFIX,vimeo.com,Proxy
|
||||
DOMAIN-SUFFIX,vimeocdn.com,Proxy
|
||||
DOMAIN-SUFFIX,vine.co,Proxy
|
||||
DOMAIN-SUFFIX,vivaldi.com,Proxy
|
||||
DOMAIN-SUFFIX,vox-cdn.com,Proxy
|
||||
DOMAIN-SUFFIX,vsco.co,Proxy
|
||||
DOMAIN-SUFFIX,vultr.com,Proxy
|
||||
DOMAIN-SUFFIX,w.org,Proxy
|
||||
DOMAIN-SUFFIX,w3schools.com,Proxy
|
||||
DOMAIN-SUFFIX,webtype.com,Proxy
|
||||
DOMAIN-SUFFIX,wikiwand.com,Proxy
|
||||
DOMAIN-SUFFIX,wikileaks.org,Proxy
|
||||
DOMAIN-SUFFIX,wikimedia.org,Proxy
|
||||
DOMAIN-SUFFIX,wikipedia.com,Proxy
|
||||
DOMAIN-SUFFIX,wikipedia.org,Proxy
|
||||
DOMAIN-SUFFIX,windows.com,Proxy
|
||||
DOMAIN-SUFFIX,windows.net,Proxy
|
||||
DOMAIN-SUFFIX,wire.com,Proxy
|
||||
DOMAIN-SUFFIX,wordpress.com,Proxy
|
||||
DOMAIN-SUFFIX,workflowy.com,Proxy
|
||||
DOMAIN-SUFFIX,wp.com,Proxy
|
||||
DOMAIN-SUFFIX,wsj.com,Proxy
|
||||
DOMAIN-SUFFIX,wsj.net,Proxy
|
||||
DOMAIN-SUFFIX,xda-developers.com,Proxy
|
||||
DOMAIN-SUFFIX,xeeno.com,Proxy
|
||||
DOMAIN-SUFFIX,xiti.com,Proxy
|
||||
DOMAIN-SUFFIX,yahoo.com,Proxy
|
||||
DOMAIN-SUFFIX,yimg.com,Proxy
|
||||
DOMAIN-SUFFIX,ying.com,Proxy
|
||||
DOMAIN-SUFFIX,yoyo.org,Proxy
|
||||
DOMAIN-SUFFIX,ytimg.com,Proxy
|
||||
|
||||
# Telegram
|
||||
DOMAIN-SUFFIX,telegra.ph,Proxy
|
||||
DOMAIN-SUFFIX,telegram.org,Proxy
|
||||
|
||||
IP-CIDR,91.108.4.0/22,Proxy,no-resolve
|
||||
IP-CIDR,91.108.8.0/21,Proxy,no-resolve
|
||||
IP-CIDR,91.108.16.0/22,Proxy,no-resolve
|
||||
IP-CIDR,91.108.56.0/22,Proxy,no-resolve
|
||||
IP-CIDR,149.154.160.0/20,Proxy,no-resolve
|
||||
IP-CIDR6,2001:67c:4e8::/48,Proxy,no-resolve
|
||||
IP-CIDR6,2001:b28:f23d::/48,Proxy,no-resolve
|
||||
IP-CIDR6,2001:b28:f23f::/48,Proxy,no-resolve
|
||||
|
||||
# Google 中国服务 services.googleapis.cn
|
||||
IP-CIDR,120.232.181.162/32,Proxy,no-resolve
|
||||
IP-CIDR,120.241.147.226/32,Proxy,no-resolve
|
||||
IP-CIDR,120.253.253.226/32,Proxy,no-resolve
|
||||
IP-CIDR,120.253.255.162/32,Proxy,no-resolve
|
||||
IP-CIDR,120.253.255.34/32,Proxy,no-resolve
|
||||
IP-CIDR,120.253.255.98/32,Proxy,no-resolve
|
||||
IP-CIDR,180.163.150.162/32,Proxy,no-resolve
|
||||
IP-CIDR,180.163.150.34/32,Proxy,no-resolve
|
||||
IP-CIDR,180.163.151.162/32,Proxy,no-resolve
|
||||
IP-CIDR,180.163.151.34/32,Proxy,no-resolve
|
||||
IP-CIDR,203.208.39.0/24,Proxy,no-resolve
|
||||
IP-CIDR,203.208.40.0/24,Proxy,no-resolve
|
||||
IP-CIDR,203.208.41.0/24,Proxy,no-resolve
|
||||
IP-CIDR,203.208.43.0/24,Proxy,no-resolve
|
||||
IP-CIDR,203.208.50.0/24,Proxy,no-resolve
|
||||
IP-CIDR,220.181.174.162/32,Proxy,no-resolve
|
||||
IP-CIDR,220.181.174.226/32,Proxy,no-resolve
|
||||
IP-CIDR,220.181.174.34/32,Proxy,no-resolve
|
||||
|
||||
RULE-SET,LAN,DIRECT
|
||||
|
||||
# 剩余未匹配的国内网站
|
||||
DOMAIN-SUFFIX,cn,DIRECT
|
||||
DOMAIN-KEYWORD,-cn,DIRECT
|
||||
|
||||
# 最终规则
|
||||
GEOIP,CN,DIRECT
|
||||
FINAL,Proxy,dns-failed
|
||||
|
||||
[URL Rewrite]
|
||||
^https?://(www.)?(g|google).cn https://www.google.com 302
|
||||
Reference in New Issue
Block a user