-
-
Save KuRRe8/fd4e0613dbd97ded17cf087a4419556b to your computer and use it in GitHub Desktop.
常见保留网段分类如下:
10.0.0.0/8A类,一般来说公司学校内网使用10段地址,可以容纳2^24地址1600万个172.16.0.0/12B类,100万个192.168.0.0/16C类,家庭使用,6.5万个,家庭路由器一般用24位掩码,也就是只有254个可用地址 用途:局域网、VPN、NAT。
127.0.0.0/8→ 本机环回(常用127.0.0.1)。该类地址不会通过网卡,而是在操作系统协议栈内部发回本地。169.254.0.0/16→ 链路本地(DHCP 失败时自动回落的地址段,比如两个需要DHCP的PC机用网线直连,在30s后各自会分配该网段地址)。
192.0.2.0/24→ TEST-NET-1198.51.100.0/24→ TEST-NET-2203.0.113.0/24→ TEST-NET-3 用途:示例、教材、文档。相当于三个假网段,路由器程序理应将这类网段加入黑名单,丢弃发往这些网段的包。在PC机上是否有限制未知。
0.0.0.0/8→ 本网络(源地址用得多)。100.64.0.0/10→ Carrier-Grade NAT (CGNAT)。运营商级别的公共IP池,用户侧的WAN口,相当于拥有4,194,304地址的一个小型公网,依旧需要NAT到全球公网192.0.0.0/24→ IETF 协议保留(如 DS-Lite 用192.0.0.8/32)。192.88.99.0/24→ 6to4 继任网段(已废弃)。
198.18.0.0/15→ 网络设备性能测试。(比如用于测试路由器的吞吐量使用该地址段,不再向外路由)
224.0.0.0/4→ IPv4 多播。(相当于在群聊里发公告,群组内设备都要被路由得到消息)240.0.0.0/4→ 保留,未来可能使用。
用于代理。
可以下载桌面端的Clash Verge for Windows或者下载Linux命令行端的
git clone --branch master --depth 1 https://gh-proxy.org/https://github.com/nelvko/clash-for-linux-install.git \
&& cd clash-for-linux-install \
&& bash install.sh桌面端比较方便,可以直接从url导入,也可以按文件导入。命令行端安装完后可以根据提示导入url,或者打开clashctl/resources/runtime.yaml 来编辑。 桌面端点击按钮打开系统代理或者虚拟网卡tun。 命令行端执行clashctl on开启,虚拟网卡通过clashctl tun on开启(但是要提前配置好)。
Warning
配置文件一定要写好内网地址直连不走代理。之前就是忽略这个导致内网ssh失败,还查了一晚上其他原因以为服务器坏了。
浏览器访问外网是最直接的方法,因为浏览器会尊重代理Proxy。
其他桌面程序自由决定是否尊重代理设置,但如果是tun模式则一定流量转发。
命令行程序不一定默认走Proxy,如果可能的话,tun模式免除很多麻烦,但如果主机是多用户的,最好不要tun安装额外的虚拟网卡。
以下针对Proxy模式,仅凭命令行的检测方法:首先把clashctl/resources/runtime.yaml写好后,clashctl on开启代理
Important
在该模式下ping google.com是不行的,因为ICMP是网络层协议,和应用层代理设置无关。
由于curl git pip apt这类自带工具一般遵守代理所以可以用curl直接
curl -I https://google.com
如果得到类似上述结果,那么外网已经成功了。
Note
但是某些特定的cli程序会拒绝走代理,这个用户一般无法介入,比如Gemini Cli。
还可以通过下面的指令获取自己出口ip的详细信息。
curl https://ipinfo.io/json如果刚才的检测失败,则执行以下一系列检验
# 查看clash日志,一般无法成功启动是因为配置文件有误导致
clashctl log
# 检测是否设置好了环境,这里的7897是配置文件里的端口,没有的话要么是没有on要么是配置文件问题
env | grep -i proxy
# 应该类似于下方内容,如果没有则查看clashctl log
#no_proxy=localhost,127.0.0.1,::1
#https_proxy=http://192.168.18.191:7897
#NO_PROXY=localhost,127.0.0.1,::1
#HTTPS_PROXY=http://192.168.18.191:7897
#HTTP_PROXY=http://192.168.18.191:7897
#http_proxy=http://192.168.18.191:7897
#ALL_PROXY=socks5h://192.168.18.191:7897
#all_proxy=socks5h://192.168.18.191:7897
# 检测clash是否监听了预设端口,没有的话一般也是配置文件问题
ss -tunlp | grep :7897
# 手动指定代理端口
curl -x http://127.0.0.1:7897 https://api.ipify.org
# 有可能是DNS污染等
nslookup google.com
mixed-port: 7897
allow-lan: true
bind-address: '*'
mode: rule
log-level: info
dns:
enable: false
ipv6: false
default-nameserver:
- 223.5.5.5
- 119.29.29.29
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
use-hosts: true
nameserver:
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
- tls://dot.pub
- tls://dns.alidns.com
fallback:
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
- tls://dot.pub
- tls://dns.alidns.com
fallback-filter:
geoip: true
ipcidr:
- 240.0.0.0/4
- 0.0.0.0/32
proxies:
- name: '🇺🇸 我的美国节点'
type: vmess
server: 填写自己的vps
port: 填写自己的port
uuid: 填写自己的id
alterId: 0
cipher: auto
udp: true
network: tcp
tls: false
proxy-groups:
- name: Proxy
type: select
proxies:
- '🇺🇸 我的美国节点'
rules:
- 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,127.0.0.0/8,DIRECT,no-resolve
- DOMAIN-SUFFIX,google.com,Proxy
- DOMAIN-SUFFIX,googleapis.com,Proxy
- DOMAIN-SUFFIX,github.com,Proxy
- DOMAIN-SUFFIX,openai.com,Proxy
- DOMAIN-SUFFIX,x.com,Proxy
- DOMAIN-SUFFIX,youtube.com,Proxy
- GEOIP,CN,DIRECT
- MATCH,Proxy
ping同一个网段内所有地址嗅探主机
1..254 | ForEach-Object -Parallel {
if (Test-Connection -ComputerName "192.168.1.$_" -Count 1 -Quiet -TimeoutSeconds 1) {
"192.168.1.$_"
}
} -ThrottleLimit 64
非并行嗅探,速度较慢
1..254 | ForEach-Object {
if (Test-Connection "192.168.1.$_" -Count 1 -Quiet -TimeoutSeconds 1) {
"192.168.1.$_"
}
}
ARP嗅探
for /L %i in (1,1,254) do @ping -n 1 -w 50 192.168.1.%i >nul
arp -a
Bash内置语法检测网络端口
timeout 1 bash -c "echo > /dev/tcp/192.168.1.1/80" && echo "open" || echo "closed"
在诸如Jetson 这类嵌入式板卡二次开发过程中,有可能面临无显示器远程登陆的需求。而远程登陆需要一个确定的网络,要么是外部的WiFi(通常有Internet),要么是Jetson主动开启Hotspot,然后PC接入该热点后远程连接(无Internet)。连接工具可以是SSH,VSCODE,NoMachine,ToDesk, VNC,向日葵等。但由于Jetson已经处于Headless状态,无法在桌面环境配置网络,所以需要提前写好服务,使得其能够开机自适应连接。该服务逻辑:如果有已知的WiFi则接入,如果没有已知WiFi或者连接失败,则fallback到hotspot。
需要准备:
sudo apt install network-manager
sudo systemctl enable NetworkManager
sudo systemctl start NetworkManager脚本如下
#!/bin/bash
INTERFACE="自己的无线网卡名称wlP7p1s0"
SSID="某个网络"
PASSWORD="某个密码"
HOTSPOT_NAME="热点名"
HOTSPOT_PASSWORD="热点密码"
CHECK_INTERVAL=15
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1"
}
# 判断是否已连接(包括 WiFi / hotspot / 正在连接)
is_connected() {
STATE=$(nmcli -t -f GENERAL.STATE dev show "${INTERFACE}" | cut -d: -f2 | awk '{print $1}')
if [ "$STATE" -ge 50 ]; then
return 0
else
return 1
fi
}
connect_wifi() {
log "Trying to connect to ${SSID}"
nmcli dev wifi connect "${SSID}" password "${PASSWORD}" ifname "${INTERFACE}"
return $?
}
start_hotspot() {
log "Starting hotspot ${HOTSPOT_NAME}"
nmcli dev wifi hotspot ifname "${INTERFACE}" ssid "${HOTSPOT_NAME}" password "${HOTSPOT_PASSWORD}"
log "nmcli return status $?"
}
while true; do
#sleep ${CHECK_INTERVAL}
if is_connected; then
log "Network is active (wifi or hotspot)"
else
log "Not connected, trying WiFi"
connect_wifi
if [ $? -ne 0 ]; then
log "WiFi failed, fallback to hotspot"
start_hotspot
else
log "Connected to ${SSID}"
fi
fi
sleep ${CHECK_INTERVAL}
done然后脚本使用chmod +x赋予执行权。
添加服务到/etc/systemd/system/wifi-monitor.service
[Unit]
Description=WiFi Monitor Service
After=NetworkManager.service
Wants=NetworkManager.service
[Service]
Type=simple
ExecStart=/usr/local/bin/wifi_monitor.sh
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target最后执行命令开启服务
systemctl daemon-reexec
systemctl daemon-reload
systemctl enable wifi-monitor.service
systemctl start wifi-monitor.service