Linux网络探索总结

欢迎交流🤣🤣

OpenWRT

解决wireguard在openwrt全局代理流量不走代理的原因。

场景:对端设置了wg的服务端,client需要走wireguard全局代理,绕过网络认证,并且将其作为wan口,然后将所有的流量都路由过去。类似于安卓共享VPN一样(原生安卓)

初始条件:针对USB网络共享问题

由于会将USB识别为光驱CD-ROM,所以需要安装如下包,实现网络连接,相关内容可以查看状态→系统日志

  • 如果时间不对,先将NTP服务器设置好
  • 设置好kmod-usb-net-rndis,usb-modeswitch,kmod-usb-net-cdc-ether,wireguard-tools,luci-app-wireguard,luci-proto-wireguard
  • 插入USB网络

添加网络接口

  • 添加USB接口:网络→接口,添加usb,协议dhcp,选择日志中对应的网口,如eth1(可以通过插拔观察设备在线情况),如果有需要,这些还得添加一个dhcpv6以便用于ipv6的访问,防火墙为wan
  • 添加wireguard接口,同理,设置,选择wireguard客户端,在设置页面,选择导入配置文件,粘贴wg-clinet 配置文件,防火墙为wan,在高级设置中一定要勾选路由允许IP。
  • 还有一点,那就是metric,如果发现route之后的metric大于原来路由表的metric,务必在网络→接口,调低其他的metric,使得wg的metric大于这些。
  • 2026-4-30-19-29:更新:不再建议直接修改metric,可以让默认metric比网络端口大,但是需要在网络→路由中加入一个硬路由0.0.0.0/0指向wg,并且将metric设置为0
image-20260430120102476
image-20260430120102476
  • 这个时候,应该可以看到wg端口有流量变化了!但是在op终端应该还是ping不通

设置路由

不知道为什么,即使设置了默认网关,实际上wg也不能成为默认网关,这就会导致如下图所示的情况,default是第一条,而不是第三条54网段的。

image-20260426112259567
image-20260426112259567

这个时候我们需要设置强制路由:网络→路由,添加,接口为wg,目标为0.0.0.0/0,metric设置为1,可以看到第一条已经变成如下这个形式,说明工作正常

image-20260426112431373
image-20260426112431373

至此,可以实现类似于手机共享usb一样的功能

设置域名白名单

DNS重绑定保护,如果dns解析出来是个内网ip,默认会认为这个是网络攻击,所以默认是丢弃的,导致ping不通,如hinas-v4.ninglang.top,进入网络→DHCP→过滤器→域名白名单→添加域名即可解决

image-20260426114050933
image-20260426114050933

添加无线

进入网络→无线,有radio0和radio1,0为2.4G,1为5G,点击添加按钮,添加,设置页面需要设置为lan口,设置密码即可,务必避免12和13信道,因为默认如果是us的话会导致2.4G无法启动

image-20260426120800954
image-20260426120800954

tailscale登录

  • 先安装软件包kmod-tun,iptables-zz-legacy, ip6tables-zz-legacy

进入GuNanOvO/openwrt-tailscale: The Latest, Smaller Tailscale for OpenWrt Devices. 适用于 OpenWrt 设备的 最新的、更小的 Tailscale。下载合适版本的tailscale ,安装

  • 登录tailscale login
  • 开启tailscale 并且接受子网路由tailscale up --reset --accept-routes --accept-dns=false
  • 在网络→接口→添加一个接口,设置开机不启动,选择不配置协议→选择tailscale0,在防火墙新建一个防火墙tailscale
  • 在网络→防火墙→tailscale防火墙中设置,入站,出站均接受,并且在tailscale这里部分选择动态ip伪装
  • 记得将lan口对tailscale 的访问加入,需要两个可以完全互相访问
  • 如果出现某些误差导致tailscale挂了,请使用如下命令重启,应该可以重新获取ip
1
killall tailscaled
  • 如果想要启动,可以使用
1
tailscale up

安装之后,进入ssh命令行,执行tailscale login --reset--accept-routes --accept-dns=false,一般需要reset清空路由

  • 如果想要结束自启动,可以尝试直接使用系统→

记录

  • 不知道什么原因,目前的方案是关闭路由中的映射,重启,发现还可以

更新_2026-05-30

  • 网络→接口→wg
    • 关闭自启动,使用默认网关,metric设置1
    • 允许ip 0.0.0.0/0;输入端点ip的位置,可以直接使用ip
    • 网络路由改为0.0.0.0/0→wg,metric→0
  • 写一个Hotplug 脚本
1
vi /etc/hotplug.d/iface/99-wg-delay
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/sh

if [ "$INTERFACE" = "wan" ] && [ "$ACTION" = "ifup" ]; then
(
sleep 30
ifup wg0
sleep 3

ip rule del iif br-lan lookup 100 2>/dev/null
ip route del default dev wg0 table 100 2>/dev/null

ip route add default dev wg0 table 100
ip rule add iif br-lan lookup 100
) &
fi

这样就可以再wan启动之后,过去30s使用wg0

  • 解决端点访问的问题:访问wg server时候依然走wan口,但是局域网(wifi)流量全部走wg,这样不会环路
  • 系统→启动项→本地启动脚本,写入,直接写入上面的Hotplug 脚本中,因为wg没有启动的时候没有wg0网卡
1
2
3
4
ip route add default dev wg0 table 100
ip rule add iif br-lan lookup 100

exit 0

使用SSH-Tunnel实现代理

一般来说,服务器是没有代理软件的,导致内网的软件无法直接访问,如果刚好也懒得安装的话,毕竟一般安装可能需要导入配置之类,在加上一个,服务器和客户机都是内网的情况下,这种情况变得很麻烦,如果直接使用客户端的代理,肯定是最方便的。这里主要使用ssh服务实现将客户端的内网的代理。

image-20260506102241936
image-20260506102241936

命令行

将远端的7890监听Windows端内网的7890端口,实现代理转发,

1
ssh -R 7890:192.168.1.25:7890 username@server_ip

然后使用代理节点

1
2
export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"

最后测试内网使用可以访问

1
curl -I http://192.168.1.25

图像软件直接使用

使用xshell,ssh→隧道→添加,使用远程模式,原主机是localhost,侦听端口设置为7890,目标主机和端口就填写内网代理端

image-20260506102522464

测试应该OK的

VSCode设置

如何通过vscode进行设置,进入设置,这个实现需要选择remote的设置,这是因为如果选择user的话,会直接影响这整个vscode,然后在设置proxy。

  • 在proxy中填写http://127.0.0.1:7895
  • proxy with strict ssl取消
  • proxy support设置运行

更换DNS

直接更换DNS,开机自动生效

1
nano /etc/systemd/resolved.conf
1
2
3
[Resolve]
DNS=202.114.0.131 202.114.0.242
FallbackDNS=223.5.5.5 8.8.8.8

重启一下

1
systemctl restart systemd-resolved