基于Armbian搭建旁路由
家庭科学上网的方案有很多,本文介绍基于旁路由的方案,我选择这种方案的原因是,对主路由和家庭网络几乎无侵扰,能满足家庭普通成员的上网需求,也能满足我常常需要科学上网的需要,最重要的是相比于用主路由做透明代理,这种方案是比较稳定的,就算出了问题也不至于将家庭网络搞瘫痪。
1. 设备
我用的是斐讯N1, 网络上的大多数方案都是斐讯N1刷openwrt, 然后基于openwrt来配置旁路由,方案比较简单,只需要在页面上做配置即可。但是我的N1装的是armbian系统,不想再对它刷机了, 因此直接基于armbian来搭建旁路由。
我的N1还装了一个usb无线网卡,放在弱电箱里快两年了,放在弱电箱里的好处是我几乎感觉不到它的存在,但却有一个几乎永不会下线的服务器。该N1通过无线网卡上网,接口名称是Wlan0。
2. 网络拓扑
1主路由:192.168.31.1(提供DHCP、上网)
2N1: 192.168.31.89(Wi-Fi 接入主路由)
3SOCKS5:127.0.0.1:1080(运行在 N1 本地)
4其它设备:网关设为 192.168.31.89
其它设备发出的所有 TCP 流量 → N1 → 转发到 SOCKS5 → 出网
3. N1 Armbian的配置
3.1 首先开启ip转发
1sudo bash -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
2sudo sed -i 's/^#net.ipv4.ip_forward=.*/net.ipv4.ip_forward=1/' /etc/sysctl.conf
3.2 安装redsocks2
不要装redsocks, 它对https的处理有问题,无法做到透明转发,因此会被很多网站识别出来报安全问题, 需要编译安装redsocks2
1git clone [email protected]:kaizushi/redsocks2.git
2apt install libevent-dev libssl-dev build-essential
3cd redsocks2
4make
make之后会成功编译redsocks2文件,基于该程序做一个systemd service
1install redsocks2 /usr/bin/redsocks2
vim /etc/systemd/system/redsocks2.service
写入如下内容
1[Unit]
2Description=Transparent redirector of any TCP connection to proxy using your firewall
3
4[Service]
5Type=forking
6EnvironmentFile=/etc/conf.d/redsocks2
7User=root
8ExecStartPre=/usr/bin/redsocks2 -t -c $REDSOCKS_CONF
9ExecStart=/usr/bin/redsocks2 -c $REDSOCKS_CONF
10Restart=on-abort
11
12[Install]
13WantedBy=multi-user.target
vim /etc/conf.d/redsocks2
写入如下内容
1# 指定 redsocks2 配置文件路径
2REDSOCKS_CONF="/etc/redsocks2/redsocks2.conf"
vim /etc/redsocks2/redsocks2.conf
写入如下内容, 注意这里的type是socks5, 因为我的本地启的是socks5的代理,如果是SSR,V2ray之类的,请参考最下面的参考链接修改配置文件
1base {
2 log_debug = off;
3 log_info = on;
4 log = "syslog:daemon";
5 daemon = on;
6 redirector = iptables;
7}
8
9redsocks {
10 local_ip = 0.0.0.0;
11 local_port = 12345;
12 ip = 127.0.0.1;
13 port = 1080;
14 type = socks5; // I use socks5 proxy for GFW'ed IP
15 // autoproxy = 1; // I want autoproxy feature enabled on this section.
16 // timeout is meaningful when 'autoproxy' is non-zero.
17 // It specified timeout value when trying to connect to destination
18 // directly. Default is 10 seconds. When it is set to 0, default
19 // timeout value will be used.
20 // NOTE: decreasing the timeout value may lead increase of chance for
21 // normal IP to be misjudged.
22 // timeout = 13;
23 //type = http-connect;
24 //login = username;
25 //password = passwd;
26}
然后启动服务
1systemctl enable redsocks2
2systemctl start redsocks2
3.3 配置iptables转发规则
把接收到的 TCP 流量重定向给 redsocks。
1# 清理旧规则
2sudo iptables -t nat -F
3sudo iptables -F
4
5# 启用iptable_nat模块
6echo "iptable_nat" | sudo tee /etc/modules-load.d/iptable_nat.conf
7
8# 新建链
9sudo iptables -t nat -N REDSOCKS
10
11# 忽略本地及局域网流量(不要代理内网)
12sudo iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
13sudo iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
14sudo iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
15sudo iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN
16sudo iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
17sudo iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
18sudo iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN
19sudo iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN
20
21# 其他 TCP 流量重定向到 redsocks
22sudo iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345
23
24# DNS 代理劫持
25sudo iptables -t nat -A PREROUTING -i wlan0 -p udp --dport 53 -j REDIRECT --to-ports 12345
26
27
28# 把 PREROUTING 的流量交给 REDSOCKS 处理
29sudo iptables -t nat -A PREROUTING -i wlan0 -p tcp -j REDSOCKS
保存规则
1sudo apt install iptables-persistent -y
2sudo netfilter-persistent save
4. 测试验证
在另一台设备上设置:
1网关:192.168.31.89
2DNS:192.168.31.89(或公共 DNS)
打开浏览器访问 http://ipinfo.io/ip
应显示 SOCKS5 出口 IP;
查看 redsocks2 日志:
1sudo journalctl -u redsocks2 -f
若有连接日志说明转发正常。

评论列表:
暂无评论 😭