生于忧患,咸鱼安乐
Toggle navigation
Home
About Me
Archives
Tags
用systemd将双网口设备打造成软路由
NanoPi R2S
R2S
systemd
Linux
Ubuntu
计算机网络
软路由
2020-11-25 01:12:03
840
0
0
squarefong
NanoPi R2S
R2S
systemd
Linux
Ubuntu
计算机网络
软路由
# 0.背景 旁路由折腾熟悉之后,我又开始觊觎软路由的方便,于是不久前借着双十一,下单了早有耳闻的NanoPi R2S,177大洋,有散热片有风扇有外壳,还算划算。奈何我跟OpenWRT八字不合,上次树莓派是半天LUCI进不去,这次是FriendWRT官方固件砍掉了tproxy模式。在重新编译固件依然无法成功富强之后。我又掏出了祖传技能,直接用了FriendlyCore(基于Ubuntu)秒杀了富强网关的需求。这个方式也非常通用,不只是R2S,也不仅限于Ubuntu,理论上可以将任何一个双网口的运行Linux并且使用Systemd的机器变成软路由。 # 1. 配置Wan侧 刷好FriendlyCore之后直接插卡开机,然后就能在路由器管理页面看到该设备的ip地址。我们ssh上去就可以进行配置了,默认用户名和密码都是pi。 配置文件参考: [systemd-network](https://wiki.archlinux.org/index.php/Systemd-networkd_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#%E4%BD%BF%E7%94%A8_DHCP_%E7%9A%84%E6%9C%89%E7%BA%BF%E9%80%82%E9%85%8D%E5%99%A8) 对应这台机器就是直接在终端执行 sudo vim /etc/systemd/network/eth0.network 然后把下面的内容复制进去。 [Match] Name=eth0 [Network] DHCP=ipv4 # 2. 配置Lan侧 一个软路由本质上就是开启了DHCP服务,DNS服务,网络层包转发的多网口计算机。因此在常规的配置中,通常会配置dnsmasq来做DHCP服务器,并同时担任DNS服务器。然后通过sysctl打开ip包转发,然后用iptables完成包的转发。 但是现在,systemd都包含了这些功能,不需到别的地方到处配置,也不需要再多装什么包,只需把systemd配置好就能完成这些。 我们依然是进入终端,执行 sudo vim /etc/systemd/network/eth1.network 然后把下面的内容复制粘贴进去后,保存并退出。 [Match] Name=eth1 [Network] Address=192.168.25.1/24 DHCPServer=true IPMasquerade=true [DHCPServer] PoolOffset=100 PoolSize=50 EmitDNS=yes DNS=223.5.5.5 `/etc/systemd/resolved.conf`这个文件我不记得有没有用了。。。按照我后面的操作,systemd-resolved这个服务我应该是没有用到的,但是保险起见还是配了吧。 ``` [Resolve] DNS=223.5.5.5 FallbackDNS=8.8.8.8 ``` 我们发现无论如何重启,`/etc/resolv.conf`都是会变成127.0.0.53。为了避免后续和v某ray产生冲突,需要禁止这种工作模式。但是systemd-resolved禁用会导致wan侧联网失败,所以必须另想办法。。。经过一番搜索,还是[ArchWiki](https://wiki.archlinux.org/index.php/Systemd-resolved#DNS)讲的好,`/etc/resolv.conf`在此处只是一个link,真实文件另有地方,而另一个文件由systemd接管。这是推荐的工作模式,但是我们不需要,所以需要手动切换成另一种工作模式。切换办法也很简单:把`/etc/resolv.conf`删除,再手动新建即可。 sudo rm /etc/resolv.conf sudo vim /etc/resolv.conf 然后粘贴下面的内容(可以只写一行) ``` nameserver 223.5.5.5 nameserver 8.8.8.8 ``` # 3. 自动重启服务 干完这一切,重启一下执行下面命令,配置就会生效,Lan侧插上网线已经是可以联网的了。 sudo systemctl restart systemd-networkd sudo systemctl restart systemd-resolved 但是重启系统后你会发现,lan侧依然无法上网,还是需要`systemctl restart systemd-networkd`。这就比较蛋疼了。。。但是解决办法也很简单,加一条脚本,在联网后自动`systemctl restart systemd-networkd`即可解决问题。 自动重启脚本(我放在`/root/autoRouter.sh`): #!/bin/bash systemctl restart systemd-resolved 编辑systemd文件(`vim /etc/systemd/system/toBeRouter.service`) [Unit] Description=network rule After=network.target Wants=network.target [Service] Type=oneshot User=root ExecStart=/root/autoRouter.sh [Install] WantedBy=multi-user.target 最后打开服务使其生效: sudo systemctl daemon-reload sudo systemctl enable toBeRouter 最后,配禾斗 * * 网的服务,直接参考成熟的tproxy方案照抄就行。我这里暂时挺稳。
Pre:
NotiSync-Qt使用简介
Next:
树莓派4体验ubuntu20.04之编译安装Kodi
0
likes
840
Weibo
Wechat
Tencent Weibo
QQ Zone
RenRen
Please enable JavaScript to view the
comments powered by Disqus.
comments powered by
Disqus
Table of content