恩山无线论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 445|回复: 1

我家云ARMBIAN系统搭建家庭网关

[复制链接]
发表于 2020-5-23 12:37 | 显示全部楼层 |阅读模式

# 我家云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







评分

参与人数 1恩山币 +3 收起 理由
antons + 3 强大的恩山!(以下重复1万次)

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
发表于 2020-5-23 13:56 | 显示全部楼层
感谢分享多样的可能 有你更精彩
来自苹果客户端来自苹果客户端
我的恩山、我的无线 The best wifi forum is right here.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )|网站地图

GMT+8, 2020-6-4 08:54

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表