|
# 我家云ARMBIAN系统搭建家庭网关I
家里有一台软路由和一台NAS,因为小孩经常要看视频,上油管看的话费流量(上个月AWS超了一百多GB的流量,结果多收了16刀。心在滴血),而NAS耗电量较大(35W左右),开机时间长(5~6min左右),于是想搞一个耗电低轻量NAS,选择了可以接3.5寸硬盘的我家云,咸鱼上入手的,不含邮费90元,懒得讨价还价了。拿回来用结果会掉盘,最后还是觉得还是把掉盘云搞成软路由算了。也不想用OpenWrt,刷成OPENWRT的话,每次更新的话要重新刷,麻烦。干脆用LINUX。参(PIAO)考(QIE)了很多网文,基本上搞成了。
这里记录一下搭建过程。我是凭着大致印象而记录,可能有的地方有错误,但是大体上是正确的。希望有用。
注:这个是第I部分,主要还是基本的网络接入;还有第II部分,有关DNS和出国留学的,就不在这里发文或者以后再发。
## 硬件布局I
- 电脑网线直接插入至我家云网口;
- 我家云已刷了OMV,默认地址是192.168.1.1;
- 电脑IP地址设置为192.168.1.8
ssh登入后进行下述配置。
## 我家云软件安装与配置
### 基本网络接口配置
修改配置网络接口配置文件:
```
cat << EOF > /etc/network/interfaces
source /etc/network/interfaces.d/*
# Network is managed by Network manager
auto lo
iface lo inet loopback
auto eth0
allow-hotplug eth0
iface eth0 inet static
vlan-raw-device eth0
address 192.168.80.1
netmask 255.255.255.0
iface eth0 inet manual
## WAN
auto eth0.2
iface eth0.2 inet static
vlan-raw-device eth0
up ip link set eth0.2 promisc on
address 192.168.80.1
netmask 255.255.255.0
iface eth0.2 inet static
vlan-raw-device eth0
up ip link set eth0.2 promisc on
address 192.168.1.2
netmask 255.255.255.0
#gateway 192.168.1.1
iface eth0.2 inet static
vlan-raw-device eth0
up ip link set eth0.2 promisc on
address 192.168.8.138
netmask 255.255.255.0
gateway 192.168.8.1
## LAN
auto eth0.1
iface eth0.1 inet static
vlan-raw-device eth0
address 192.168.6.1
netmask 255.255.255.0
EOF
```
这里配置了几个接口:
- eth0, 配置静态IP,VLAN配置错误导致失联时可通过电脑ssh登入到192.168.80.1登入。
- eth0.1,作为单臂路由LAN口。
- eth0.2,作为单臂路由WAN口。
把默认的network-manager、 resolvconf和dhcpd5禁用或删除:
```
systemctl disable network-manager
systemctl disable resolvconf
systemctl stop resolvconf
apt-get purge dhcpd5
```
### IPv4转发与BBR等配置
修改sysctl.conf:
```
cat << EOF >> /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.tcp_keepalive_time = 5
net.ipv4.tcp_keepalive_probes = 2
net.ipv4.tcp_keepalive_intvl = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
fs.file-max = 1000000
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF
sysctl -p /etc/sysctl.conf
```
修改/etc/security/limits.conf,加入:
```
root soft nofile 10000
root hard nofile 10000
```
## K2P配置虚拟局域网
SSH登入斐讯K2P,执行一下指令:
```
/usr/bin/robocfg vlans reset vlan 1 ports "0t 1u 2u 3u 8t" vlan 2 ports "0t 4u"
```
执行
```
/usr/bin/robocfg show
```
输出如下:
```
Switch: enabled
<...>
VLANs: BCM5301x enabled mac_check mac_hash
1: vlan1: 0t 1 2 3 8t
2: vlan2: 0t 4
```
port0-3为路由器上LAN1-LAN4口,port4为WAN口,port8应该是WIFI对应的CPU。
上述指令将斐讯路由器划分为两个VLAN:
- VLAN1对应LAN2、LAN3、LAN4和WIFI,家里的终端(电脑、手机等)接入这些接口;
- VLAN2对应WAN口,到时候光猫会接入;
- TRUNC口对应LAN1口,连接掉盘云。
## 硬件布局II
现在,关掉掉盘云和斐讯路由器,重新接线:
- 3855U软路由WAN口仍接入光猫,获取互联网接入;
- 斐讯K2P之LAN1口接入掉盘云之网口,作为VLAN1和VLAN2的TRUNCK口;
- 斐讯K2P之WAN口接入软路由的一个LAN口,VLAN2从上级的3855U软路由的LAN口获得互联网接入;
- 斐讯K2P之LAN2、LAN3、LAN4(VLAN1)可以接终端,这里电脑接入LAN4口;
打开我家云和斐讯路由器,掉盘云接入家里的网络,电脑可以用3种方式通过SSH登入我家云:
- 设置电脑IP为192.168.6.8,登入192.168.6.1(这意味着VLAN 1配置正常);
- 设置电脑IP为192.168.8.8,登入192.168.8.138(这意味着VLAN 1配置正常);
- 设置电脑IP为192.168.80.8,登入192.168.80.1;
我家云已经通过静态IP接入3855U软路由,获得了互联网接入,并且VLAN配置正常。
如果无法登入,可能是哪里配置有误,只能按如下方式可以登入我家云:
- 用HDMI线连接我家云HDMI口与电视HDMI口,一个USB键盘插入我家云USB端口;
下一步安装和配置必要的软件。
### 基本软件安装与配置
#### 安装必要的软件
```
apt-get update
apt-get install -y dnsmasq pppoeconf
```
#### 配置dnsmasq
- 基本配置
```
cat << EOF > /etc/dnsmasq.conf
conf-dir=/etc/dnsmasq.d/,.bak
conf-dir=/etc/dnsmasq.d/,*.conf
EOF
```
这个主要是告诉dnsmasq要读取/etc/dnsmasq.d下面的conf文件,但不要读取bak文件。
- dhcp配置
```
cat << EOF > /etc/dnsmasq.d/dhcp
interface=eth0.1 #DHCP服务接口
dhcp-range=eth0.1,192.168.8.100,192.168.8.200,255.255.255.0, 24h #IP分配范围、广播等配置
dhcp-leasefile=/etc/dnsmasq.leases
EOF
```
这个主要是动态IP分配的相关配置,我将局域网IP改回192.168.8.0/24网段了。
- dns配置
```
cat << EOF > /etc/dnsmasq.d/dns
listen-address=127.0.0.1,10.5.0.1,172.24.1.1,172.24.0.1,172.30.0.1,192.168.6.1 #监听地址,提供本机和LAN口、virtual**的DNS服务
no-resolv #不使用/etc/resolv.conf中的DNS服务器,后面server选项已经指定了上级服务器,故不需要用到系统网卡配置的DNS
cache-size=1000 #保留1000个缓存地址,提高解析的速度,特别是有污染的情况下
server=114.114.114.114 #上级服务器,此处选择了国内很常用的114 DNS
#server=127.0.0.1#5311
clear-on-reload #重启后清除缓存
EOF
```
主要配置dns相关,LAN口地址192.168.8.1,其他地址是virtual**接口地址,后面有配置。
配置完毕之后先不要重启,因为现在软路由还在运行着dhcp服务器,我家云与软路由还是在同一个网段(192.168.8.0/24)。
## 硬件布局III
上述配置完了之后,更改硬件布局:
- 光猫接入斐讯路由器之WAN口(eth0.2);
- 电脑接入斐讯路由器之LAN2~LAN4口(eth0.1);
- 我家云接入斐讯路由器之LAN1口(eth0.1,eth0.2)。
重新接线之后,关闭斐讯路由器、我家云的电源后重新开机。
开机后,可以设置电脑IP为192.168.8.8,登入掉盘云的IP地址192.168.8.1。
## PPPOE配置
用PPPOE配置光猫拨号,执行pppoeconf,但有时候不能检测出PPPOE连接,这里在后面加个eth0.2:
```
pppoeconf eth0.2
```
此后,按照提示,基本上都是按回车,输入账号密码就行了。
拨号配置完毕之后,pppoeconf在/etc/ppp下面生产了一下文件:
- /etc/ppp/peers/dsl-provider,拨号配置文件,我嫌名字不爽,把文件名改为ct0;
- /etc/ppp/chap-secrets,拨号密码本;
另外,pppoeconf也在/etc/network/interface里面增加了dsl-provider的接口信息:
```
auto dsl-provider
iface dsl-provider inet ppp
pre-up /bin/ip link set eth0.2 up # line maintained by pppoeconf
provider dsl-provider
auto eth0.2
iface eth0.2 inet manual
```
同样不爽,修改了dsl-provider部分,把它替换为ct0。
在终端输入:
```
pon ct0
ip -4 addr
```
可以看到已经成功的获取到IP了,实现光猫上网,但仅仅是我家云可以上网,局域网内的其他设备不能,还要进行更一步的配置。
## 内网主机上网防火墙
```
cat << 'EOF' > /etc/ppp/ip-up.d/ipv4masq.sh
IPTABLES=/sbin/iptables
DEPMOD=/sbin/depmod
MODPROBE=/sbin/modprobe
EXTIF="ppp0"
INTIF="eth0.1"
echo "External Interface: $EXTIF"
echo "Internal Interface: $INTIF"
$DEPMOD -a
$MODPROBE ip_tables
$MODPROBE ip_conntrack
$MODPROBE ip_conntrack_ftp
$MODPROBE ip_conntrack_irc
$MODPROBE iptable_nat
$MODPROBE ip_nat_ftp
#$MODPROBE ip_nat_irc
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
$IPTABLES -P INPUT ACCEPT
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -F OUTPUT
$IPTABLES -P FORWARD DROP
$IPTABLES -F FORWARD
$IPTABLES -t nat -F
$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
$IPTABLES -A FORWARD -j LOG
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
EOF
chmod +x /etc/ppp/ip-up.d/ipv4masq.sh
echo /etc/ppp/ip-up.d/ipv4masq.sh >> /etc/ppp/ip-up
```
上述命令生成防火墙脚本,并放入/etc/ppp/ip-up末尾,当拨号或者重新拨号时,上述脚本会被调用。
注意INPUT的默认策略是允许,如果不是的话,必须显式的允许TCP/UDP端口53和UDP端口67;否则的话,DNSMASQ无法提供DNS服务和分配动态IP地址。
这样,拨号后,自动应用防火墙规则,转发封包并实现内网主机地址伪装,实现内外主机网络访问功能。
再次试一下:
```
poff -a;pon ct0
```
稍等片刻,在我家云执行
```
ip -4 addr
```
可以看到ppp0接口已经得到了公网IPv4地址,掉盘云本身已经接入互联网。
内网主机配置为静态或动态IP,也可以上网了。
## 自动拨号配置
配置完毕之后,我家云重启后需要手动输入pon ct0拨号,很不方面,需要设置自动拨号。
- /etc/rc.local 法
开启rc.local服务:
```
systemctl enable rc-local
```
让开机自动运行拨号:
```
cat << EOF > /etc/rc.local
#!/bin/sh
poff -a;
pon ct0;
exit 0
EOF
chmod +x /etc/rc.local
```
重新开机之后就可以自动拨号了。
- /etc/network/interfaces 法
另外一个方法是在接口配置文件里启用:
```
cat << EOF > /etc/network/interfaces
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto eth0
#allow-hotplug eth0
iface eth0 inet static
address 192.168.80.1
netmask 255.255.255.0
iface eth0 inet dhcp
iface eth0 inet manual
## LAN
auto eth0.1
iface eth0.1 inet static
vlan-raw-device eth0
address 192.168.8.1
netmask 255.255.255.0
post-up ip route del 192.168.8.0/24
post-up ip route add 192.168.8.0/24 dev eth0.1
## WAN
auto eth0.2
iface eth0.2 inet ppp
vlan-raw-device eth0
up ip link set eth0.2 promisc on
pre-up /sbin/ip link set dev eth0.2 up
provider ct0
post-down /sbin/ip link set dev eth0.2 down
iface eth0.2 inet static
address 192.168.1.2
netmask 255.255.255.0
```
这样不需要修改/etc/rc.local,比较方便,也感觉比较符合DEBIAN系统的网络配置惯例。
## 主要参考资料
https://ksana410.github.io/2019/ ... er-03-DNS-and-DHCP/
http://gruffi.be/mediawiki/index.php/Ipv6_with_PPPoE_on_Ubuntu
|
评分
-
查看全部评分
|