debian双网口网关配置策略
前期准备工作
安装工具软件
apt-get install iptables ipset
debian双网口配置
cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
#allow-hotplug enp1s0
#iface enp1s0 inet dhcp
# 内网
auto enp1s0
iface enp1s0 inet static
address 10.10.10.1
netmask 255.255.255.0
# 外网
auto enp2s0
iface enp2s0 inet static
address 192.168.10.36
netmask 255.255.255.0
gateway 192.168.10.31
dns-nameservers 114.114.114.114
# 下面表示,所有 192.168 开头的内网请求都走内网的网关和设备返回
#up route add -net 10.10.10.0 netmask 255.255.255.0 gw 10.10.10.1 dev enp1s0
# 下面表示默认路由
#up route add default gw 192.168.10.31 dev enp2s0
#pre-up ip rule add fwmark 666 lookup 666
#pre-up ip route add local 0.0.0.0/0 dev lo table 666
#pre-up iptables-restore < /etc/iptables/rules.v4
iptables配置
在配置iptables时,您需要考虑以下几点:
- 允许内网流量:确保iptables规则允许内网设备之间的通信。这通常意味着您需要允许来自内网IP地址段的流量。
- 允许外网流量:如果您希望内网设备能够访问外网,您需要设置规则来允许从内网接口转发到外网的流量。
- 阻止不必要的流量:为了提高安全性,您可能希望阻止或限制某些不必要的入站和出站流量。
- NAT(网络地址转换):如果您的Debian网关为内网设备提供NAT服务,您需要配置iptables规则来进行源地址转换(SNAT)和目标地址转换(DNAT)。
以下是一个基本的iptables配置示例,它允许内网通信、从内网到外网的流量,并且启用了NAT:
# 允许已建立的连接和相关联的新连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许内网设备之间的通信
iptables -A FORWARD -s 10.10.10.0/24 -d 10.10.10.0/24 -j ACCEPT
# 允许从内网到外网的流量,并将源地址转换为外网接口的IP地址
iptables -t nat -A POSTROUTING -o enp2s0 -j MASQUERADE
# 让当前机器成为一个网关服务器
iptables -t filter -A FORWARD -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o enp2s0 -j MASQUERADE
# 允许外网到内网特定服务的流量(例如SSH)
iptables -t nat -A PREROUTING -p tcp --dport 22 -j DNAT --to-destination 10.10.10.10:22
请注意,上述规则仅为示例,您需要根据您的具体网络环境和需求进行调整。例如,您可能需要为特定的服务(如HTTP、HTTPS、SMTP等)添加额外的规则。
在修改iptables规则之后,您可以使用iptables -L -v
命令来查看当前的规则列表,并确保它们按照您的预期工作。
最后,不要忘记保存您的iptables规则,以便在系统重启后依然生效。您可以使用iptables-save
命令来保存规则,并将其配置为在启动时自动加载。例如,您可以将以下命令添加到/etc/rc.local
文件中:
iptables-save > /etc/iptables/rules.v4
并在/etc/network/interfaces
文件中添加以下行:
pre-up iptables-restore < /etc/iptables/rules.v4
这样,每次启动网络服务时,都会加载您保存的iptables规则。
为了提高Debian网关的安全性,您可以通过iptables设置一系列的规则来阻止不必要的入站和出站流量。以下是一些基本的iptables规则示例,用于增强安全性:
1. input入站流量设置
#对于已经建立的连接,允许所有响应的流量通过。
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#环回接口通常用于测试和系统服务,通常需要允许这些流量。
iptables -A INPUT -i lo -j ACCEPT
#如果您的服务器运行某些服务,如SSH或HTTP,您需要允许这些服务的入站流量
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#如果您知道某些IP地址或IP段是恶意的,可以阻止它们的流量。
iptables -A INPUT -s 192.168.56.0/24 -j ACCEPT
iptables -A INPUT -s 192.168.1.100 -j DROP
iptables -A INPUT -s 192.168.1.0/24 -j DROP
#这个规则将丢弃所有未经明确允许的入站流量,这是基于默认拒绝原则。
iptables -P INPUT DROP
#新建链
iptables -N zone_wan_input
iptables -A zone_wan_input -s 192.168.10.0/24 -j REJECT
2. 限制特定服务的出站流量
您可以限制出站流量,只允许访问特定的服务或IP地址。
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT # 只允许访问DNS
iptables -A OUTPUT -d example.com -j ACCEPT # 只允许访问特定网站
3. 记录被拒绝的流量
您可以配置iptables来记录被拒绝的流量,这对于分析潜在的安全威胁很有帮助。
iptables -A INPUT -j LOG --log-prefix "IPTABLES-INPUT: " --log-level 7
iptables -A FORWARD -j LOG --log-prefix "IPTABLES-FORWARD: " --log-level 7
iptables -A OUTPUT -j LOG --log-prefix "IPTABLES-OUTPUT: " --log-level 7
8. 保存iptables规则
为了确保在系统重启后iptables规则仍然有效,您需要保存这些规则。
iptables-save > /etc/iptables/rules.v4
确保您的系统配置在启动时加载这些规则。对于Debian和基于Debian的系统,通常可以通过在/etc/network/interfaces
文件中添加以下行来实现:
pre-up iptables-restore < /etc/iptables/rules.v4
注意事项
- 在实施任何防火墙规则之前,请确保您完全理解每个规则的含义和潜在的影响。
- 在生产环境中,建议先在非生产环境或测试环境中测试规则。
- 请定期审查和更新您的iptables规则,以确保它们满足您的安全需求。
- 考虑使用更高级的防火墙管理工具,如ufw或firewalld,它们提供了更易于管理和配置的用户界面。
通过这些步骤,您可以显著提高Debian网关的安全性,同时确保必要的网络流量不受影响。
rc.local配置
#!/bin/sh -e
#
# rc.local
sleep 1
/sbin/ipset restore -f /root/china_net.ipset
sleep 1
ip rule add fwmark 666 lookup 666
ip route add local 0.0.0.0/0 dev lo table 666
sleep 1
iptables-restore < /etc/iptables/rules.v4
nginx
exit 0
iptables脚本
#!/usr/bin/env bash
set -ex
# ENABLE ipv4 forward
#sysctl -w net.ipv4.ip_forward=1
# ROUTE RULES
# 这个命令添加了一条规则,用于匹配具有特定fwmark(防火墙标记)的流量。在这里,fwmark 666意味着所有具有标记666的数据包将被匹配。lookup 666则指定了当匹配到这些数据包时,将使用编号为666的路由表进行路由决策。
ip rule add fwmark 666 lookup 666
# 这个命令添加了一条路由规则到编号为666的路由表中。local 0.0.0.0/0表示所有本地生成的流量(即源地址为本地地址的流量),dev lo指定了流量将通过本地回环接口(lo接口),通常用于本机通信。table 666意味着这条规则将被添加到编号为666的路由表中。
ip route add local 0.0.0.0/0 dev lo table 666
# ip rule show
# ip rule show table 666
# ip route show table all
# clash 链负责处理转发流量
iptables -t mangle -N clash
# 目标地址为局域网或保留地址的流量跳过处理
# 保留地址参考: https://zh.wikipedia.org/wiki/%E5%B7%B2%E5%88%86%E9%85%8D%E7%9A%84/8_IPv4%E5%9C%B0%E5%9D%80%E5%9D%97%E5%88%97%E8%A1%A8
iptables -t mangle -A clash -d 0.0.0.0/8 -j RETURN
iptables -t mangle -A clash -d 127.0.0.0/8 -j RETURN
iptables -t mangle -A clash -d 10.0.0.0/8 -j RETURN
iptables -t mangle -A clash -d 172.16.0.0/12 -j RETURN
iptables -t mangle -A clash -d 192.168.0.0/16 -j RETURN
iptables -t mangle -A clash -d 169.254.0.0/16 -j RETURN
iptables -t mangle -A clash -d 224.0.0.0/4 -j RETURN
iptables -t mangle -A clash -d 240.0.0.0/4 -j RETURN
# 其他所有流量转向到 7893 端口,并打上 mark
iptables -t mangle -A clash -p tcp -j TPROXY --on-port 7893 --tproxy-mark 666
iptables -t mangle -A clash -p udp -j TPROXY --on-port 7893 --tproxy-mark 666
# 转发所有 DNS 查询到 1053 端口
# 此操作会导致所有 DNS 请求全部返回虚假 IP(fake ip 198.18.0.1/16)
#iptables -t nat -I PREROUTING -p udp --dport 53 -j REDIRECT --to 1053
# 如果想要 dig 等命令可用, 可以只处理 DNS SERVER 设置为当前内网的 DNS 请求
#iptables -t nat -I PREROUTING -p udp --dport 53 -d 192.168.0.0/16 -j REDIRECT --to 1053
iptables -t nat -I PREROUTING -p tcp -m tcp --dport 53 -j REDIRECT --to-ports 53
iptables -t nat -I PREROUTING -p udp -m udp --dport 53 -j REDIRECT --to-ports 53
# 最后让所有流量通过 clash 链进行处理
iptables -t mangle -I PREROUTING -m set --match-set china_net dst -j ACCEPT
iptables -t mangle -A PREROUTING -j clash
# clash_local 链负责处理网关本身发出的流量
iptables -t mangle -N clash_local
# nerdctl 容器流量重新路由
#iptables -t mangle -A clash_local -i nerdctl2 -p udp -j MARK --set-mark 666
#iptables -t mangle -A clash_local -i nerdctl2 -p tcp -j MARK --set-mark 666
# 跳过内网流量
iptables -t mangle -A clash_local -d 0.0.0.0/8 -j RETURN
iptables -t mangle -A clash_local -d 127.0.0.0/8 -j RETURN
iptables -t mangle -A clash_local -d 10.0.0.0/8 -j RETURN
iptables -t mangle -A clash_local -d 172.16.0.0/12 -j RETURN
iptables -t mangle -A clash_local -d 192.168.0.0/16 -j RETURN
iptables -t mangle -A clash_local -d 169.254.0.0/16 -j RETURN
iptables -t mangle -A clash_local -d 224.0.0.0/4 -j RETURN
iptables -t mangle -A clash_local -d 240.0.0.0/4 -j RETURN
# 为本机发出的流量打 mark
iptables -t mangle -A clash_local -p tcp -j MARK --set-mark 666
iptables -t mangle -A clash_local -p udp -j MARK --set-mark 666
# 跳过 clash 程序本身发出的流量, 防止死循环(clash 程序需要使用 "clash" 用户启动)
iptables -t mangle -I OUTPUT -m set --match-set china_net dst -j ACCEPT
iptables -t mangle -A OUTPUT -p tcp -m owner --uid-owner clash -j RETURN
iptables -t mangle -A OUTPUT -p udp -m owner --uid-owner clash -j RETURN
# 让本机发出的流量跳转到 clash_local
# clash_local 链会为本机流量打 mark, 打过 mark 的流量会重新回到 PREROUTING 上
iptables -t mangle -A OUTPUT -j clash_local
# 修复 ICMP(ping)
# 这并不能保证 ping 结果有效(clash 等不支持转发 ICMP), 只是让它有返回结果而已
# --to-destination 设置为一个可达的地址即可
#sysctl -w net.ipv4.conf.all.route_localnet=1
#iptables -t nat -A PREROUTING -p icmp -d 198.18.0.0/16 -j DNAT --to-destination 127.0.0.1
清除脚本
#!/usr/bin/env bash
set -ex
ip rule del fwmark 666 table 666 || true
ip route del local 0.0.0.0/0 dev lo table 666 || true
#iptables -t nat -F
#iptables -t nat -X
iptables -t nat -D PREROUTING 2
iptables -t nat -D PREROUTING 1
iptables -t mangle -F
iptables -t mangle -X clash || true
iptables -t mangle -X clash_local || true
smartdns非root账户运行
-
新建专用的smartdns账号
useradd -M -s /usr/sbin/nologin smartdns
-
编辑
vi /etc/systemd/system/smartdns.service
[Unit] Description=SmartDNS Server After=network.target Before=network-online.target Before=nss-lookup.target Wants=nss-lookup.target StartLimitBurst=0 StartLimitIntervalSec=60 [Service] ;Type=forking Type=simple PIDFile=/etc/smartdns/smartdns.pid EnvironmentFile=/etc/default/smartdns ExecStart=/usr/sbin/smartdns -p /etc/smartdns/smartdns.pid $SMART_DNS_OPTS User=1001 Group=1001 Restart=always RestartSec=2 TimeoutStopSec=15 LimitNOFILE=65535 [Install] WantedBy=multi-user.target Alias=smartdns.service
-
修改
/etc/smartdns
chown -R smartdns:smartdns /etc/smartdns
编辑smartdns.conf
bind [::]:5353 bind-tcp [::]:5353 speed-check-mode ping|tcp:43,tcp:80 force-AAAA-SOA yes log-level info #cache-size 0 cache-size 32768 cache-persist yes cache-file /var/cache/smartdns/ serve-expired yes serve-expired-ttl 259200 serve-expired-reply-ttl 3 prefetch-domain yes serve-expired-prefetch-time 21600 cache-checkpoint-time 86400 #conf-file /etc/smartdns/anti-ad-smartdns.conf server 192.168.10.2:53 server 114.114.114.114:53 server 119.29.29.29:53 server 180.76.76.76:53 server 1.2.4.8:53 server 223.5.5.5:53 server 1.2.4.8:53 server 8.8.8.8:53 server 208.67.222.222:53 server 166.111.8.28:53 server-tls 8.8.8.8:853 server-tls 149.112.112.112:853 server-tls 208.67.222.222:853 server-tls https://i.233py.com/dns-query:853 server-tls https://dns.233py.com/dns-query:853 server-https https://dns.quad9.net/dns-query server-https https://cloudflare-dns.com/dns-query server-https https://dns.google/dns-query server-https https://doh.opendns.com/dns-query https
-
修改iptables
iptables -A PREROUTING -t nat -p udp --dport 53 -j DNAT --to-destination 192.168.56.2:5353 iptables -A PREROUTING -t nat -p tcp --dport 53 -j DNAT --to-destination 192.168.56.2:5353 iptables -A OUTPUT -t nat -p udp --dport 53 -j DNAT --to-destination 192.168.56.2:5353 iptables -A OUTPUT -t nat -p tcp --dport 53 -j DNAT --to-destination 192.168.56.2:5353
-
作用
可以使用iptables的 MARK 和 MATCH 扩展为 SmartDNS 设置 iptables 规则
比如:#确定 SmartDNS 的用户或进程 ps aux | grep smartdns #创建一个标记,用于 SmartDNS 的网络流量。选择一个未被使用的标记值,例如: iptables -A OUTPUT -m owner --uid-owner SMARTDNS_USER -j MARK --set-mark 100 #这里 SMARTDNS_USER 是 SmartDNS 进程运行时的用户,100 是您为 SmartDNS 流量设置的标记值。 #接下来,添加一条规则以允许带有该标记的流量通过 enp0s3 接口。 iptables -A FORWARD -o enp0s3 -m mark --mark 100 -j ACCEPT
iptables配置备份
# Generated by xtables-save v1.8.2 on Tue Apr 23 13:16:54 2024
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:DOCKER - [0:0]
:DOCKER-ISOLATION-STAGE-1 - [0:0]
:DOCKER-USER - [0:0]
:DOCKER-ISOLATION-STAGE-2 - [0:0]
:zone_wan_input - [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 192.168.56.0/24 -j ACCEPT
-A INPUT -i enp0s3 -j zone_wan_input
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-USER -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A zone_wan_input -s 192.168.10.0/24 -j REJECT --reject-with icmp-port-unreachable
-A zone_wan_input -i enp0s3 -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Tue Apr 23 13:16:54 2024
# Generated by xtables-save v1.8.2 on Tue Apr 23 13:16:54 2024
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:DOCKER - [0:0]
-A PREROUTING -p tcp -m tcp --dport 53 -j DNAT --to-destination 192.168.56.2:5353
-A PREROUTING -p udp -m udp --dport 53 -j DNAT --to-destination 192.168.56.2:5353
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A POSTROUTING -s 192.168.56.0/24 -o enp0s3 -j MASQUERADE
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A DOCKER -i docker0 -j RETURN
COMMIT
# Completed on Tue Apr 23 13:16:54 2024
# Generated by xtables-save v1.8.2 on Tue Apr 23 13:16:54 2024
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:clash - [0:0]
:clash_local - [0:0]
-A PREROUTING -m set --match-set china_net dst -j ACCEPT
-A PREROUTING -j clash
-A OUTPUT -m set --match-set china_net dst -j ACCEPT
-A OUTPUT -p tcp -m owner --uid-owner 1000 -j RETURN
-A OUTPUT -p udp -m owner --uid-owner 1000 -j RETURN
-A OUTPUT -j clash_local
-A clash -d 0.0.0.0/8 -j RETURN
-A clash -d 127.0.0.0/8 -j RETURN
-A clash -d 10.0.0.0/8 -j RETURN
-A clash -d 172.16.0.0/12 -j RETURN
-A clash -d 192.168.0.0/16 -j RETURN
-A clash -d 169.254.0.0/16 -j RETURN
-A clash -d 224.0.0.0/4 -j RETURN
-A clash -d 240.0.0.0/4 -j RETURN
-A clash -p tcp -j TPROXY --on-port 7893 --on-ip 0.0.0.0 --tproxy-mark 0x29a/0xffffffff
-A clash -p udp -j TPROXY --on-port 7893 --on-ip 0.0.0.0 --tproxy-mark 0x29a/0xffffffff
-A clash_local -d 0.0.0.0/8 -j RETURN
-A clash_local -d 127.0.0.0/8 -j RETURN
-A clash_local -d 10.0.0.0/8 -j RETURN
-A clash_local -d 172.16.0.0/12 -j RETURN
-A clash_local -d 192.168.0.0/16 -j RETURN
-A clash_local -d 169.254.0.0/16 -j RETURN
-A clash_local -d 224.0.0.0/4 -j RETURN
-A clash_local -d 240.0.0.0/4 -j RETURN
-A clash_local -p tcp -j MARK --set-xmark 0x29a/0xffffffff
-A clash_local -p udp -j MARK --set-xmark 0x29a/0xffffffff
COMMIT
# Completed on Tue Apr 23 13:16:54 2024
iptables配置备份2
# Generated by xtables-save v1.8.2 on Fri May 10 00:22:22 2024
*filter
:INPUT ACCEPT [8016:565401]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [104260:59727304]
:DOCKER - [0:0]
:DOCKER-ISOLATION-STAGE-1 - [0:0]
:DOCKER-USER - [0:0]
:zone_wan_input - [0:0]
:DOCKER-ISOLATION-STAGE-2 - [0:0]
:zone_lan_input - [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i enp0s3 -j zone_wan_input
-A INPUT -i enp0s8 -j zone_lan_input
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-USER -j RETURN
-A zone_wan_input -s 192.168.10.0/24 -j REJECT --reject-with icmp-port-unreachable
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A zone_lan_input -s 192.168.22.0/24 -j ACCEPT
-A zone_lan_input -s 192.168.56.0/24 -j ACCEPT
COMMIT
# Completed on Fri May 10 00:22:22 2024
# Generated by xtables-save v1.8.2 on Fri May 10 00:22:22 2024
*nat
:PREROUTING ACCEPT [1719:167331]
:INPUT ACCEPT [871:82431]
:POSTROUTING ACCEPT [8548:554298]
:OUTPUT ACCEPT [8537:553726]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 192.168.11.0/24 ! -o docker0 -j MASQUERADE
-A POSTROUTING -s 192.168.11.0/24 ! -o docker0 -j MASQUERADE
-A POSTROUTING -s 192.168.56.0/24 -o enp0s3 -j MASQUERADE
-A POSTROUTING -s 192.168.22.0/24 -o enp0s3 -j MASQUERADE
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A DOCKER -i docker0 -j RETURN
COMMIT
# Completed on Fri May 10 00:22:22 2024
# Generated by xtables-save v1.8.2 on Fri May 10 00:22:22 2024
*mangle
:PREROUTING ACCEPT [468:58150]
:INPUT ACCEPT [103199:52789632]
:FORWARD ACCEPT [6186:4215826]
:OUTPUT ACCEPT [18962:2127327]
:POSTROUTING ACCEPT [110445:63943078]
:clash - [0:0]
:clash_local - [0:0]
-A PREROUTING -m set --match-set china_net dst -j ACCEPT
-A PREROUTING -j clash
-A OUTPUT -m set --match-set china_net dst -j ACCEPT
-A OUTPUT -p tcp -m owner --uid-owner 1000 -j RETURN
-A OUTPUT -p udp -m owner --uid-owner 1000 -j RETURN
-A OUTPUT -j clash_local
-A clash -d 0.0.0.0/8 -j RETURN
-A clash -d 127.0.0.0/8 -j RETURN
-A clash -d 10.0.0.0/8 -j RETURN
-A clash -d 172.16.0.0/12 -j RETURN
-A clash -d 192.168.0.0/16 -j RETURN
-A clash -d 169.254.0.0/16 -j RETURN
-A clash -d 224.0.0.0/4 -j RETURN
-A clash -d 240.0.0.0/4 -j RETURN
-A clash -p tcp -j TPROXY --on-port 7893 --on-ip 0.0.0.0 --tproxy-mark 0x29a/0xffffffff
-A clash -p udp -j TPROXY --on-port 7893 --on-ip 0.0.0.0 --tproxy-mark 0x29a/0xffffffff
-A clash_local -d 0.0.0.0/8 -j RETURN
-A clash_local -d 127.0.0.0/8 -j RETURN
-A clash_local -d 10.0.0.0/8 -j RETURN
-A clash_local -d 172.16.0.0/12 -j RETURN
-A clash_local -d 192.168.0.0/16 -j RETURN
-A clash_local -d 169.254.0.0/16 -j RETURN
-A clash_local -d 224.0.0.0/4 -j RETURN
-A clash_local -d 240.0.0.0/4 -j RETURN
-A clash_local -p tcp -j MARK --set-xmark 0x29a/0xffffffff
-A clash_local -p udp -j MARK --set-xmark 0x29a/0xffffffff
COMMIT
# Completed on Fri May 10 00:22:22 2024
电脑双网关切换批处理
@echo off
setlocal enabledelayedexpansion
set "gateway1=192.168.10.2"
set "gateway2=192.168.56.2"
for /f "tokens=2,3 delims=: " %%i in ('route print ^| findstr %gateway1%') do (
set "currentGateway=%%i"
set "currentSubnetMask=%%j"
)
@rem echo Current Default Gateway: !currentGateway!
if "!currentGateway!"=="0.0.0.0" (
echo Current Default Gateway: %gateway1%
echo Switching to Gateway %gateway2%
route delete 0.0.0.0
route add -p 0.0.0.0 mask 0.0.0.0 %gateway2%
) else if "!currentGateway!"=="255.255.255.255" (
echo Current Default Gateway: %gateway2%
echo Switching to Gateway %gateway1%
route delete 0.0.0.0
route add -p 0.0.0.0 mask 0.0.0.0 %gateway1%
) else (
echo No known gateway is currently set. Setting to Gateway %gateway1%.
route delete 0.0.0.0
route add -p 0.0.0.0 mask 0.0.0.0 %gateway1%
)
endlocal
route print
网络目标 网络掩码 网关 接口 跃点数
0.0.0.0 0.0.0.0 192.168.56.2 192.168.56.1 26
0.0.0.0 0.0.0.0 192.168.10.2 192.168.10.77 35
#第一条路由表明,对于任何目的地为"0.0.0.0"(即默认路由)的流量,它将通过网关"192.168.56.2",并且流量将从接口"192.168.56.1"发送,该路径的跃点数为26。
#第二条路由也是一条默认路由,但它通过不同的网关"192.168.10.2",且流量将从接口"192.168.10.77"发送,跃点数为35。
-
网络目标 (Network Destination): 表示目标网络的IP地址。在这里,"0.0.0.0" 通常指的是默认网关,意味着任何非本地网络的流量都将被发送到指定的网关。
-
网络掩码 (Subnet Mask): 用于确定IP地址中网络部分的位数。在这里,"0.0.0.0" 表示没有子网划分,即默认路由。
-
网关 (Gateway): 这是流量到达目标网络前必须经过的下一个设备(通常是路由器)的IP地址。
-
接口 (Interface): 这是发送流量的网络接口的IP地址。
-
跃点数 (Metric): 这是到达目标网络的成本或距离,跃点数越低,表示路径越优。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。