记录一下家里网络的一些配置

家里使用的三线接入主路由进行拨号,mwan3 优先级为 即插即用 5G RNDIS > 电信 > 长城宽带,网内还有一个 Debian 系统的透明网关,记录下重要配置供以后参考。

参考链接:

Openwrt 上的

/etc/config/network 包含一些 switch、interface 相关的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

config interface 'loopback'
option ifname 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'

config globals 'globals'
option ula_prefix 'fdc9:2d14:f187::/48'
option packet_steering '1'

config interface 'lan'
option type 'bridge'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
option ip6assign '64'
option ifname 'wan'

config interface 'wan'
option ifname 'lan1'
option proto 'pppoe'
option keepalive '0'
option username '021********'
option password '******'
option metric '41'
option ipv6 'auto'

config interface 'rndis'
option proto 'dhcp'
option macaddr '2C:B2:1A:5D:8A:00'
option _orig_ifname 'usb0'
option _orig_bridge 'false'
option metric '40'
option ifname 'eth1'

config interface 'telecom'
option proto 'pppoe'
option ifname 'lan2'
option username 'ad********'
option password '********'
option keepalive '0'
option ipv6 'auto'
option metric '42'

/etc/config/dhcp 包含 DHCP 相关的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57

config dnsmasq
option localise_queries '1'
option rebind_protection '1'
option rebind_localhost '1'
option local '/lan/'
option domain 'lan'
option expandhosts '1'
option authoritative '1'
option readethers '1'
option leasefile '/tmp/dhcp.leases'
option resolvfile '/tmp/resolv.conf.d/resolv.conf.auto'
option nonwildcard '1'
option localservice '1'
option cachesize '0'
option doh_backup_noresolv '-1'
list doh_backup_server ''
option noresolv '0'

config dhcp 'lan'
option interface 'lan'
option start '100'
option limit '150'
option leasetime '12h'
option ra_slaac '1'
list ra_flags 'managed-config'
list ra_flags 'other-config'
list dhcp_option '6,192.168.1.234'
list dhcp_option '3,192.168.1.234'
option ra 'server'
list dns 'fe80::2e0:b4ff:fe1c:72ba'
option dhcpv6 'server'
option ra_management '1'

config dhcp 'wan'
option interface 'wan'
option ignore '1'

config odhcpd 'odhcpd'
option maindhcp '0'
option leasefile '/tmp/hosts/odhcpd'
option leasetrigger '/usr/sbin/odhcpd-update'
option loglevel '4'

config srvhost
option srv '_vlmcs._tcp'
option target 'OpenWrt'
option port '1688'
option class '0'
option weight '100'

config host
option dns '1'
option ip '192.168.1.234'
option leasetime 'infinite'
option name 'debian'
option mac '00:e0:b4:1c:72:ba'

/etc/config/mwan3 三线故障自动切换相关配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121

config rule 'iptv_rule1'
option dest_ip '20.253.1.1/24'
option proto 'all'
option sticky '0'
option use_policy 'wan_only'

config rule 'iptv_rule2'
option dest_ip '20.254.1.1/24'
option proto 'all'
option sticky '0'
option use_policy 'wan_only'

config rule 'gateway_rule'
option proto 'all'
option sticky '0'
option use_policy 'default_policy'
option src_ip '192.168.1.234'

config rule 'telecom_rule'
option proto 'all'
option sticky '0'
option use_policy 'except_unicom'
option src_ip '192.168.1.1/24'

config rule 'default_rule'
option proto 'all'
option sticky '0'
option use_policy 'default_policy'

config globals 'globals'
option mmx_mask '0x3F00'
option local_source 'lan'

config interface 'wan'
option enabled '1'
option initial_state 'online'
option family 'ipv4'
option reliability '1'
option count '1'
option size '56'
option timeout '2'
option interval '5'
option failure_interval '5'
option recovery_interval '5'
option down '3'
option up '3'
option check_quality '0'
option track_method 'httping'
list track_ip '101.95.49.100'
list track_ip '182.61.200.7'

config interface 'telecom'
option enabled '1'
option initial_state 'online'
option family 'ipv4'
option reliability '1'
option count '1'
option size '56'
option timeout '2'
option interval '5'
option failure_interval '5'
option recovery_interval '5'
option down '3'
option up '3'
option check_quality '1'
option failure_latency '1000'
option failure_loss '20'
option recovery_latency '500'
option recovery_loss '5'
list track_ip '101.95.49.100'
list track_ip '182.61.200.7'
option track_method 'httping'

config interface 'rndis'
option enabled '1'
option initial_state 'online'
option family 'ipv4'
option reliability '1'
option count '1'
option size '56'
option check_quality '0'
option timeout '2'
option interval '5'
option failure_interval '5'
option recovery_interval '5'
option down '3'
option up '3'
option track_method 'httping'
list track_ip '101.95.49.100'
list track_ip '182.61.200.7'

config member 'wan_m2_w1'
option interface 'wan'
option metric '2'
option weight '1'

config member 'telecom_m3_w1'
option interface 'telecom'
option metric '3'
option weight '1'

config member 'rndis_m1_w1'
option interface 'rndis'
option metric '1'
option weight '1'

config policy 'default_policy'
option last_resort 'default'
list use_member 'wan_m2_w1'
list use_member 'rndis_m1_w1'
list use_member 'telecom_m3_w1'

config policy 'except_unicom'
list use_member 'rndis_m1_w1'
list use_member 'telecom_m3_w1'
option last_resort 'unreachable'

config policy 'wan_only'
list use_member 'wan_m2_w1'
option last_resort 'default'

Debian 上的

先记录下相关命令

1
2
3
useradd clash
systemctl daemon-reload
dpkg-reconfigure iptables-persistent

iptables

1
2
3
4
5
6
7
8
9
10
11
12
iptables -t nat -I PREROUTING 1 -s 192.168.1.1 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -j CLASH
iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner 0 -j REDIRECT --to-ports 7892
iptables -t nat -A CLASH -p tcp -j REDIRECT --to-ports 7892
iptables -t nat -A CLASH -d 0.0.0.0/8 -j RETURN
iptables -t nat -A CLASH -d 10.0.0.0/8 -j RETURN
iptables -t nat -A CLASH -d 127.0.0.0/8 -j RETURN
iptables -t nat -A CLASH -d 169.254.0.0/16 -j RETURN
iptables -t nat -A CLASH -d 172.16.0.0/12 -j RETURN
iptables -t nat -A CLASH -d 192.168.0.0/16 -j RETURN
iptables -t nat -A CLASH -d 224.0.0.0/4 -j RETURN
iptables -t nat -A CLASH -d 240.0.0.0/4 -j RETURN

/etc/systemd/system/clash.service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Unit]
Description=clash service
Requires=systemd-networkd-wait-online.service
After=systemd-networkd-wait-online.service

[Service]
User=clash
Group=clash
Type=simple
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
ExecStart=/usr/local/bin/clash -d /etc/clash/
Restart=on-failure

[Install]
WantedBy=multi-user.target

/etc/clash/config.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
port: 7890
socks-port: 7891
redir-port: 7892
allow-lan: true
external-controller: 192.168.1.234:9090
secret: "******"
mode: Rule
log-level: warning
# log-level: info

experimental:
ignore-resolve-fail: false

proxies:
- name: Proxy
type: **
server: **
port: **
uuid: **
alterId: 0
cipher: auto
tls: true
network: ws
ws-path: **
ws-headers:
Host: **

dns:
enable: true
listen: 0.0.0.0:53
enhanced-mode: redir-host
nameserver:
- 127.0.0.1:5335

rules:
- DOMAIN-SUFFIX,mlsub.net,DIRECT
...

Openwrt 21 / LEDE 编译配置 Nginx + Mysql + PHP 环境

编译时勾选以下 mod

  • Languages
    • PHP7
      • php7
      • PHP7 LIBXML support
        • Use system timezone data instead of php’s built-in database
      • php7-cli
      • php7-fpm
      • php7-mod-bcmath
      • php7-mod-calendar
      • php7-mod-ctype
      • php7-mod-curl
      • php7-mod-dom
      • php7-mod-exif
      • php7-mod-fileinfo
      • php7-mod-filter
      • php7-mod-ftp
      • php7-mod-gd
      • php7-mod-gettext
      • php7-mod-gmp
      • php7-mod-iconv
      • php7-mod-imap
      • php7-mod-json
      • php7-mod-ldap
      • php7-mod-mbstring
      • php7-mod-mysqli
      • php7-mod-mysqlnd
      • php7-mod-opcache
      • php7-mod-openssl
      • php7-mod-pcntl
      • php7-mod-pdo
      • php7-mod-pdo-mysql
      • php7-mod-phar
      • php7-mod-session
      • php7-mod-simplexml
      • php7-mod-sockets
      • php7-mod-tokenizer
      • php7-mod-xml
      • php7-mod-xmlreader
      • php7-mod-xmlwriter
      • php7-mod-zip
  • LuCI
    • Collections
      • luci-nginx
      • luci-ssl-nginx
      • luci-ssl-openssl
  • Network
    • SSH
      • openssh-sftp-server
    • Web Servers/Proxies
      • nginx-all-module
      • nginx-mod-luci
      • nginx-ssl-util
      • uwsgi
  • Utilities
    • Compression
      • unzip
    • Database
      • mariadb-common
        • mariadb-client-base
          • mariadb-client
        • mariadb-server-base
          • mariadb-server

并调整 Target Images 中的 Root filesystem partition size

刷入后配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/bin/bash

domain="${HOSTNAME,,}.lan"
ip=$(ip r | grep br-lan | awk '{print $NF}')
wwwroot="/mnt/mmcblk2p4/wwwroot"

cd ~

# dnsmasq
uci add_list dhcp.@dnsmasq[0].address="/.${domain}/${ip}"
uci commit dhcp
/etc/init.d/dnsmasq restart

# nginx
sed -i 's/\(fastcgi_param \)SCRIPT_NAME.*/\1SCRIPT_FILENAME $document_root$fastcgi_script_name;/' /etc/nginx/fastcgi_params
sed -i 's/http {/http {\n server_names_hash_bucket_size 64;/' /etc/nginx/uci.conf.template

# php
ln -s /usr/bin/php-cli /usr/bin/php
sed -i 's/memory_limit = 8M/memory_limit = 1024M/' /etc/php.ini

# mariadb
uci set mysqld.general.enabled='1'
uci set mysqld.general.options='--datadir=/mnt/mmcblk2p4/mariadb'
uci commit mysqld
sed -i 's/\(datadir\s\+\=\).*/\1\/mnt\/mmcblk2p4\/mariadb/' /etc/mysql/conf.d/50-server.cnf
mysql_install_db --user=mariadb --basedir=/usr --datadir=/mnt/mmcblk2p4/mariadb
/etc/init.d/mysqld start

# composer
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
mv composer.phar /usr/bin/composer

# vhost
mkdir -p "${wwwroot}/php.${domain}"
cd "${wwwroot}/php.${domain}"
cat > "/etc/nginx/conf.d/php.${domain}.conf" <<EOF
server
{
listen 80;
#listen [::]:80;
server_name php.${domain};
index index.html index.htm index.php default.html default.htm default.php;
root ${wwwroot}/php.${domain};

location ~ [^/]\.php(/|$)
{
try_files \$uri =404;
fastcgi_pass unix:/tmp/run/php7-fpm.sock;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
}

location ~ /.well-known {
allow all;
}

location ~ /\.
{
deny all;
}

access_log off;
}
EOF
/etc/init.d/nginx restart
wget https://files.phpmyadmin.net/phpMyAdmin/5.1.1/phpMyAdmin-5.1.1-all-languages.zip
unzip phpMyAdmin-5.1.1-all-languages.zip
rm phpMyAdmin-5.1.1-all-languages.zip
mv phpMyAdmin-5.1.1-all-languages phpmyadmin
chmod +x phpmyadmin/index.php
mkdir phpmyadmin/tmp
chmod 0777 phpmyadmin/tmp
cp phpmyadmin/config.sample.inc.php phpmyadmin/config.inc.php
sed -i "s/\(\$cfg\['Servers'\]\[\$i\]\['host'\] = \).*/\\1'127.0.0.1';/" phpmyadmin/config.inc.php

记一次给家宽 DDNS 配置 ssl 双向认证

用 Let’s encrypt 配置 HTTPS


  1. 安装 certbot
1
yum install python2-certbot-dns-cloudflare
  1. 登录 Cloudflare 获取 Api Key,填入文件 /etc/letsencrypt/cloudflareapi.cfg 内
1
2
dns_cloudflare_email = 
dns_cloudflare_api_key =
  1. 签发多域名证书
1
certbot-2 certonly --cert-name ddns.example.com --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflareapi.cfg --server https://acme-v02.api.letsencrypt.org/directory -d "*.ddns.example.com" -d ddns.example.com
  1. 设置 crontab 在每天凌晨 2:30 自动续签证书
1
30 2 * * * certbot-2 renew --noninteractive && service nginx reload

自签双向认证证书


下载签发脚本,先使用 create_ca_cert.sh 签发 CA 证书,然后使用 create_client_cert.sh 签发客户端证书:

1
./create_client_cert.sh --ou 财务部 --cn 财务经理 --email cy@example.com

吊销已签发的客户端证书:

1
./revoke_cert.sh 财务经理

替换 lnmp 脚本,创建 vhost


将 /usr/bin/lnmp 替换为 lnmp

1
2
3
wget https://gist.github.com/jshensh/ae59190701bd00bc69251a99f4183422/raw/f2e4f4c9167c22557119014c223bc72be5c4bf14/lnmp -O /usr/bin/lnmp
chmod +x /usr/bin/lnmp
lnmp vhost add_ddns

脚本内第 22-23 行为域名和端口配置,需要修改

1
2
ddns_domain="ddns.example.com"
port="49527"

为屏蔽无效请求添加了第 1281 行的规则,可视情况处理

放行端口


1
2
3
iptables -I INPUT -p tcp --dport 49527 -j ACCEPT
iptables-save
service iptables restart

参考文章


N1 盒子使用 Armbian 内核运行 Lede (Openwrt)

注意事项


  1. 如果用作旁路由,则 N1 接主路由的的LAN口
  2. 如果用作主路由,则 N1 接入交换机或AP模式的路由器或不插 WAN 口的路由器
  3. 以上的交换机或路由器设置为 192.168.1.X,但不能为 192.168.1.1,关闭除了 N1 外所有设备的 dhcp 服务
  4. 开 udp 转发,请:opkg install iptables-mod-tproxy

制作镜像


  1. 首先创建目录 openwrt
1
mkdir openwrt
  1. 下载 openwrt rootfs 并解压
1
2
wget https://downloads.openwrt.org/releases/18.06.2/targets/armvirt/64/openwrt-18.06.2-armvirt-64-default-rootfs.tar.gz
tar xvf openwrt-18.06.2-armvirt-64-default-rootfs.tar.gz -C openwrt
  1. 挂载 armbian 镜像
1
losetup -P -f --show Armbian_5.60_Aml-s9xxx_Debian_stretch_default_4.18.7_20180922.img

会输出类似 /dev/loop0 的内容

其他任意 arm 的镜像都行,但是很多是 img 的,请自行挂载。

  1. 把第二分区挂载到 media 目录
1
mount /dev/loop0p2 /media

注意,这里的 loop0 要和上一步中的 loop0 保持一致,有可能是 loop1 等

  1. 删除 openwrt/lib/firmware 并将 media 里的内核模块和驱动等剪切到 openwrt 目录
1
2
3
4
5
6
7
rm -rf openwrt/lib/firmware
rm -rf openwrt/lib/modules

mv /media/lib/modules openwrt/lib/
mv /media/lib/firmware openwrt/lib/
mv /media/etc/modprobe.d openwrt/etc/
mv /media/etc/fstab openwrt/etc/
  1. 切换到 openwrt/lib/modules/4.18.7-aml-s9xxx
1
cd openwrt/lib/modules/4.18.7-aml-s9xxx
  1. 创建 link-ko.sh 写入以下内容
1
2
3
4
for x in `find -name *.ko`
do
ln -s $x .
done
  1. 给予 link-ko.sh 运行权限并运行
1
2
chmod +x link-ko.sh
./link-ko.sh
  1. 回到 root 目录
1
cd
  1. 编辑 openwrt/etc/init.d/boot,在第 38 行也就是 /sbin/kmodloader 之前,增加以下内容:
1
ulimit -n 51200

至此,openwrt 配置完毕,把它们全部剪切到 media 目录

  1. 先清空 media,把 openwrt 目录下所有剪切到 media 并新建 boot 目录
1
2
3
rm -rf /media/*
mv openwrt/* /media/
mkdir /media/boot
  1. 同步一下
1
sync
  1. 卸载 media 和 openwrt 目录
1
2
umount /media
losetup -d /dev/loop0

现在 Armbian_5.60_Aml-s9xxx_Debian_stretch_default_4.18.7_20180922.img 已被修改为 openwrt 系统。

路由相关设置


主路由设置

  1. 进入 Network –> Interfaces
  2. 编辑 lan 口
  3. 取消桥接的对勾,保存
  4. Network –> Interfaces,新建 wan 接口
  5. 接口名称填 wan,协议选 pppoe,网卡选 eth0,选好后,点 submit
  6. 会自动跳转宽带帐号设置页面,填入宽带帐号密码,保存。然后就可以上网了。

旁路网关设置

进入 Network –> Interfaces –> lan 口,gateway 填主路由 ip,并设置 dns,就可以上网了。

转载自 https://www.right.com.cn/forum/thread-468983-1-1.html

N1 盒子 Ubuntu 3.14 内核开启无线热点

  1. 先开启 3.14 内核无线模块
1
modprobe dhd && echo dhd >> /etc/modules
  1. 由于和后续的 dnsmasq 冲突,需要关掉系统自带的 systemd-resolved 服务
1
2
systemctl stop systemd-resolved
systemctl disable systemd-resolved
  1. 安装要用的 dnsmasq 和 net-tools 组件
1
apt install dnsmasq net-tools
  1. 下载并安装 create_ap 工具
1
2
3
git clone https://github.com/oblique/create_ap
cd create_ap/
make install
  1. 将以下内容保存至 /usr/bin/startap 。注意别忘了修改 YourSSIDHere YourPasswordHere 两个参数。如果有需要使用 2.4GHz 网络的,请去掉 –freq-band 5 –ieee80211ac 参数
1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=ap
After=network.target


[Service]
Type=forking
ExecStart=/usr/bin/startap
PrivateTmp=true


[Install]
WantedBy=multi-user.target

并执行

1
2
3
chmod +x /usr/lib/systemd/system/ap.service
systemctl enable ap
systemctl start ap

解决dnsmasq安装好之后主机不能解析其他域名的问题

概述

事情是这样的,我想在阿里云上搭建一个dns服务器,没错就是吃空了,在阿里云上搭建一个本地的dns服务器,安装好之后发现不能ping域名了,难道是dns服务器的问题,换成114的dns也没有用,后来终于找到解决的方法了

操作

首先看下我的配置文件

1
2
3
4
resolv-file=/etc/resolv.conf
strict-order
listen-address=47.100.210.53
address=/hello.bboysoul.com/198.13.55.44

没错我加了这个 resolv-file=/etc/resolv.conf
也就是说的我的上游dns服务器地址应该是存在这个文件里面的,之后查看这个文件

1
2
3
4
#Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
options timeout:2 attempts:3 rotate single-request-reopen

这就是问题所在了,之后我们修改我们本机的dns服务器地址

1
vim /etc/resolvconf/resolv.conf.d/head

1
2
nameserver 47.100.210.53
nameserver 114.114.114.114

有人说ubuntu16.04是修改下面这个文件才可以修改dns服务器地址的,反正我是没有成功过,你们看着办

1
vim /etc/resolvconf/resolv.conf.d/base

但是绝对不能编辑下面这个文件,因为一旦重启网络,这个文件会被重写

1
vim /etc/resolv.conf

之后我们重启网络

1
systemctl restart networking

重启dnsmasq

1
systemctl restart dnsmasq

其实貌似直接重启dnsmasq就可以,因为重启这个貌似会直接重启网络的
如果你碰到同样ping不通主机的问题,但是我的方法没有帮助到你,那么也许下面是你的问题所在

第二种情况

首先看下这个进程是怎么启动的

1
2
3
4
╭─root@bboysoul-aliyun ~  
╰─➤ ps -ef |grep dnsmasq
dnsmasq 19842 1 0 17:02 ? 00:00:00 /usr/sbin/dnsmasq -x /var/run/dnsmasq/dnsmasq.pid -u dnsmasq -r /var/run/dnsmasq/resolv.conf -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new --local-service --trust-anchor=.,19036,8,2,49aac11d7b6f6446702e54a1607371607a1a41855200fd2ce1cdde32f24e8fb5 --trust-anchor=.,20326,8,2,e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d
root 20371 20335 0 21:03 pts/1 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn dnsmasq

你可以看到上面这么一段

1
-r /var/run/dnsmasq/resolv.conf

看下上面这个文件的路径和内容,如果不行那么修改下面这个文件,忽略掉上面这个文件之后重启dnsmasq

1
vim /etc/default/dnsmasq

取消下面这行注释

1
IGNORE_RESOLVCONF=yes

之后手动指定上游dns服务器也就是dnsmasq的配置文件vim /etc/dnsmasq.conf加上下面这行

1
resolv-file=/etc/resolv.conf

之后就是重复我上面第一种情况的操作了

转载自 https://www.jianshu.com/p/81c0221de34c

斐讯 N1 折腾记:运行 Linux 及优化

  咳咳咳,上篇教程教大家给斐讯 N1 降级并且刷了官改系统,可以当作一个电视盒子和下载机来使用。
  有些小伙伴可能不想把它当作电视盒子,就想把它当作 NAS 或者是服务器,但是总不能拿 Android 玩吧,Android 也不是针对服务器设计的。
  那么我们说过,N1 不仅能刷官改,还能运行 Linux,而且是完整的 Linux 发行版,用 Linux 当服务器、NAS、下载机,包括电视盒子,体验总是要比 Android 好的。
  这篇教程就教大家如何在斐讯 N1 运行 Linux 以及后续的优化,在此之前,需要将你的 N1 降级并刷入 webpad 的官改固件,或者只刷入降级关键分区(感谢群里的小伙伴反馈)。传送门:《斐讯N1折腾记:降级及刷入官改》

制作 Linux 启动盘

  N1 运行 Linux 的原理是通电的时候引导 U 盘里的系统
  所以我们需要准备一个 U 盘来制作启动盘,U 盘大小推荐不低于 8G,连续读写速度推荐达到 30M/s,随机读写速度推荐达到 10M/s。最好是买个全新的,如果是旧的,提前备份好 U 盘内数据。
  N1 运行的 Linux 发行版叫做 Armbian,玩过树莓派的小伙伴应该对这个系统不陌生,是适用于 ARM 架构的 Debian 和 Ubuntu。

下载地址

Armbian:
https://pan.baidu.com/s/1ux7zAF2QYoLWwTTB0Ah5ug 密码:axov
https://yadi.sk/d/pHxaRAs-tZiei
https://mega.nz/#F!j9QSDQSQ!6WpasOlbZYIInfw6yo4phQ
https://share.weiyun.com/5eCvcvS (部分搬运)密码:mivmcn
启动盘制作工具:https://www.alexpage.de/usb-image-tool/download/

  里面有好几个版本,下载最新的 5.44 版本,然后选择 kernel_3.14,3.14 内核在 N1 上面使用最好,WiFi、蓝牙都可以正常工作,如果你不需要蓝牙和 WiFi,也可以使用 4.16 版本。

IMG 文件名含义

例如:Armbian_5.44_S9xxx_Debian_stretch_3.14.29_server_20180601.img
Armbian:这个就不多说了
5.44:Armbian 的版本号
S9xxx:适用的 CPU
Debian:基于 Debian 编译的,另外还有 Ubuntu。
stretch:Debian 或 Ubuntu 的发行版代号,stretch 表示的是 Debian 9。
3.14.29:Linux 内核版本号
server:桌面环境,Server 代表的是服务器版,没桌面环境,其他的代表的是相应的桌面环境,比如:xfce、mate。
20180601:编译日期

  小白推荐使用 Ubuntu,桌面环境推荐使用 mate。我推荐使用 Debian Server,做一个真正的服务器。
  下面我会以 Armbian_5.44_S9xxx_Debian_stretch_3.14.29_server_20180601 版为例
  首先格式化你的 U 盘分区格式为 FAT32,推荐最好把 U 盘分区全部删除。
  打开启动盘制作工具:左侧选择你的 U 盘 → 点击 [Restore] → 选择 Linux 镜像文件 → 提示框点击 [是] → 等待制作完成
  制作完成后,会出现一个名为 BOOT 的分区,打开它。如果你把分区全部删除了,BOOT 分区默认是 FAT16 格式,Windows 是不会显示的,可以使用 Ubuntu 来访问。
  把dtb文件夹里的gxl_p230_2g.dtb复制到 BOOT 分区的根目录并重命名为dtb.img。如果是 4.16 内核,dtb 文件是meson-gxl-s905d-p230.dtb
  将 N1 断电,插上 U 盘、网线,最好是插靠近 HDMI 接口那个 USB 接口,通电开机。
  正常情况下顺利开机并进入 Linux 系统,如果没有进入 Linux 系统而是进入了 Android 系统,ADB 连接至 N1,输入adb shell reboot update
  接下来的操作我会以 SSH 远程连接为例,如果你使用 HDMI 连接显示器也可以,这种情况推荐你连接一个 USB HUB,方便连接鼠标和键盘,当然,如果你用的是 Server,那么就不需要鼠标了。
  用户:root
  密码:1234
  如何获取 N1 运行 Linux 的 IP?打开 cmd,输入nslookup amlogic,如果amlogic无法解析IP,可以尝试解析aml
  首次登陆需要重置密码,先输入当前密码(1234),再输入新密码以及确认新密码。
  设置完密码之后会让你新建一个普通用户,如果是使用 Server,直接按 Ctrl + C 跳过。如果是使用桌面版,推荐创建一个普通用户,按照提示操作即可。
  跳过之后,再次使用 SSH 连接。
  这时候,整个系统就可以用了,不过我们需要做一些小工作。

小工作

  加载 WiFi 驱动:modprobe dhd && echo dhd >> /etc/modules
  设置时区:echo "Asia/Shanghai" > /etc/timezone && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  删除默认DNS:rm /etc/resolvconf/resolv.conf.d/head && touch /etc/resolvconf/resolv.conf.d/head && systemctl restart network-manager.service
  注:在重启系统后,输入cat /etc/resolv.conf,查看返回结果的第一行是否为nameserver 8.8.8.8,如果不是,则表示删除成功,如果是,则再执行一次删除命令。
  停止红外支持:systemctl stop lircd.service lircd-setup.service lircd.socket lircd-uinput.service lircmd.service
  删除红外支持:apt remove -y lirc && apt autoremove -y
  N1 没有红外,而且由于红外支持找不到红外,一直给系统日志写错误。
  重启系统:reboot
  更新软件包:apt update && apt upgrade -y

挂载外置存储设备

  推荐把外置存储设备分区格式化为 ext4 格式,不推荐使用 NTFS 格式。
  如果你的外置存储设备是 NTFS 格式,可以使用mkfs.ext4命令将你的外置存储设备格式化为 ext4 格式,格式化前提前备份数据。
  可以用fdisk -l查看你的外置存储设备是那个设备,一般是/dev/sdb,分区是/dev/sdb1,如果有多个分区,依次类推。
  输入mkfs.ext4 /dev/sdb1将分区格式化为 ext4,格式化完成后使用fdisk -l查看是否格式化成功,如果分区的 Type 属性为 Linux(如下图所示),表示分区为 ext4/3。

fdisk

  格式化成功后,为了方便挂载,可以给分区设置一个卷标。
  命令:e2label
  设置卷标示例:e2label /dev/sdb1 H1
  查看卷标示例:e2label /dev/sdb1
  然后就可以挂载分区了
  挂载分区示例:echo "LABEL=H1 /mnt ext4 defaults,noatime,nodiratime 0 2" >> /etc/fstab
  此命令会将卷标为 H1 的分区挂载到 /mnt 目录下
  重启系统使挂载生效

Samba 网络共享

  使用 Samba 将外置存储设备共享给其他设备
  Samba 可以使用 Armbian 自带的一个可视化菜单来配置,非常方便。
  启动 Armbian 配置菜单:armbian-config
  选择 [Software] → [Softy] → 选中 (空格) [Samba] → 回车 → 输入 samba 用户名和密码 → 工作组填写 WORKGROUP → 等待安装完成
  安装后,它会自动弹出修改配置文件的界面。

samba

  将红框里的内容删除
  将 ext 的 path 改为 /mnt,如果你的挂载路径不是 /mnt,则改为你的挂载路径。
  按下 TAB 键 → 选择 [OK] → 保存退出
  Samba 网络共享配置完成

后话

  小山觉得,既然斐讯 N1 的定位是 NAS,那么运行 Android 系统是显然满足不了 NAS 这个属性的,只有运行稳定且高效的 Linux 才可以称为 NAS。
  Linux 有着更多的扩展性,你可以在上面任意的折腾,比如搭建个开发环境,Web 服务器等等。
  总而言之,几十块钱买个 N1 这样的玩具,小山觉得是非常值的。
  还是那句话:文章有什么不懂的地方,欢迎在下方或者在QQ群告诉我。
  以后如果我想到 N1 的更多玩法会继续分享给大家的,再次感谢所有为 N1 可玩性付出的人。
  本篇文章参考了以下资料:

  转载自 https://www.mivm.cn/phicomm-n1-linux/

斐讯 N1 折腾记:降级及刷入官改

  上个月,斐讯 K2T 首发那天,小山一不小心抢了两台 K2T,这就尴尬了。退了吧,好不容易抢到的,不退吧,我只能激活一台。所以,两台 K2T 我自己用了一台,另一台我准备卖出去。然而一个月过去了,眼看K码就要到期了,还是没有人要。咋办呢,只能再注册个账号来激活这台 K2T,但是首次激活的机会不能浪费啊,所以我又买了 N1 + H1 。
  本来我根本不打算买 N1,因为我觉得这货没啥用,也没怎么关注过它。但是买来之后才发现,这货居然还能刷固件,刷完固件之后就是个电视盒子了,而且还能运行完整的 Linux。
  这就非常耐斯了,我的折腾之心按耐不住了,所以就开始一步步的折腾。
  这篇教程就先教大家给 斐讯 N1 降级以及刷入官改固件(电视盒子),这也是以后折腾的基础。

降级

  如果你的 N1 系统版本是 2.19,那么可以直接跳过降级过程,如果是其他版本,请按照下面的方法降级关键分区。
  降级准备:你需要有一根双公头的 USB 数据线,淘宝几块钱包邮,附上小山购买的链接(绝对不是广告):https://detail.tmall.com/item.htm?id=13036924933
  有些机智的小伙伴可能会说,我主板有 Type-C 接口,我拿手机的 Type-C 数据线,Type-C 这头插主板,A 头插 N1 行不行。
  这个方法是可以的,小山最开始也是这么做的。但是,只能用来降级,刷官改是不行的,这个问题在刷官改步骤会解释。

  1. 开启 ADB 调试

  非常简单,只需要用鼠标点击斐讯 N1 官方固件的那个版本号 4 次,出现 【ADB调试开启】的字样即可。

  1. 重启至 fastboot 模式

  如果经常给手机刷机的小伙伴,对这个模式肯定不陌生,也就是我们平常所说的线刷模式。
  这一步需要用到 ADB 调试工具,下载地址:https://dl.google.com/android/repository/platform-tools-latest-windows.zip
  下载完成后解压,然后打开解压后的文件夹。按住 Shift,鼠标右键点击空白处,点击 [在此处打开 Powershell 窗口] 或 [在此处打开 命令提示符 窗口]。
  输入.\adb.exe connect %IP%
  将 %IP% 替换为 N1 的 IP,也就是官方固件页面显示的那个 IP。
  示例:.\adb.exe connect 192.168.1.222
  如果返回类似connected to 192.168.1.222这样的提示,表示连接成功。
  连接成功后输入.\adb.exe shell reboot fastboot,重启至 fastboot 模式。

  1. 刷入降级关键分区

  将你的 N1 用双公头 USB 数据线与电脑连接,务必连接至靠近 HDMI 接口的那个 USB 接口,连接后查看设备管理器是否识别出新的硬件,如果新硬件驱动异常,右键新硬件点击 [更新驱动程序]。
  驱动正常后,输入.\fastboot.exe devices查看 fastboot 工具是否已识别设备。
  如果返回类似XXXXXXXXXXXX fastboot这样的提示,表示成功识别。
  注:XXXXX 为序列号
  然后就可以刷入降级分区了,分区文件下载地址:N1_V2.19_imgs.zip
  将压缩包内的分区文件解压至 ADB 工具包文件夹
  依次输入命令刷入各个分区

1
2
3
.\fastboot.exe flash boot boot.img
.\fastboot.exe flash bootloader bootloader.img
.\fastboot.exe flash recovery recovery.img

  如果没有返回任何错误信息,表示降级成功。
  输入.\fastboot.exe reboot重启设备
  至此,降级步骤就完成了,可以放心的刷官改固件了。
  可能有些小伙伴会说,系统版本哪里显示的不是 2.19 啊。这个降级并不是降级系统,而是降级引导等关键分区,所以系统版本哪里不会变的。

刷入官改

  这一步比较危险和麻烦,也正是因为这一步困扰了小山好久。
  上面我说了,小山试过用 Type-C 数据线刷官改,但是没成功,为什么呢?
  问题不是出在 Type-C 上面,而是出在那个垃圾烧录工具的驱动上面(国产芯片的烧录工具,你们懂的)。
  那个烧录工具的驱动程序虽然可以兼容 Windows 10,但是缺兼容不了最新 CPU 平台。
  小山用的是 Ryzen 平台,B350 主板,但是小山各种方法都试过了,插上去它就是识别不了。后来小山把以前的旧电脑拿出来,同一个系统环境,旧电脑插上去就识别了。所以我认为是那个驱动不支持最新的CPU平台,当然,我这里只测试了 Ryzen,酷睿系列没测试,但是我估计,酷睿 7 8 系也都不支持,如果有用酷睿新平台的小伙伴成功了记得在下面留言告诉我。
  所以说,这一步,如果你用的是 Ryzen 平台,那么还是去找一台比较旧的电脑吧。
  注:小山并没有看不起国产芯片,以上言论只针对晶晨USB烧录工具。
  首先下载USB烧录工具,下载地址:USB_Burning_Tool_v2.1.6.zip
  安装的时候记得创建桌面快捷方式,安装最后的驱动安装一定不要跳过。
  另外小山找到了一个 Linux 版本的烧录工具,但没来得及测试,有兴趣的小伙伴可以试一试:http://forum.khadas.com/t/burning-tools-for-linux-pc/1832
  安装完成后还有个小工作要做

小工作

打开设备管理器
随便点击一个硬件
点击 [操作] 菜单 → [添加过时硬件] → 下一步 → 选择 [安装我手动从列表选择的硬件] → 下一步 → 选择 [libusb-win32 Usb Devices] → 下一步 → 选择 [WorldCup Device] → 下一步 → 下一步 → 完成
Burning Tool 驱动
小工作做完之后,那个USB烧录工具才可以正常工作。

  官改固件我推荐刷 webpad 的官改固件,集成度高,也很好用,自带 Google 服务、Root、Xposed 框架、离线下载等常用软件。下载地址:http://www.right.com.cn/forum/thread-322736-1-1.html
  如果只是想当一个电视盒子用的,也可以刷 YYFROM 的语音版固件,下载地址:http://www.yyfrom.com/cms/yyfrom/product/2018-4-9/156.html
  下载你喜欢的官改固件,解压压缩包,得到 img 文件。
  打开 USB_Burning_Tool → 点击 [文件] 菜单 → 导入烧录包 → 选择官改固件的 img 文件 → 等待校验完成
  校验完成后,一定要去除勾选右边烧录配置的 [擦除flash] 和 [擦除bootloader],否则会报错。

Burning Tool

  然后点击烧录工具的 【开始】,这时候,工具就进入了待命状态。
  首先将 N1 彻底断电,然后用双公头 USB 数据线连接电脑,然后接通电源。
  如果不出意外,工具应该会识别出 N1 并且开始烧录。
  如果没有识别出 N1,而 N1 直接进入了系统。使用 ADB 连接 N1(方法见上),输入.\adb.exe shell reboot update重启至刷机模式,应该就可以正常识别了。
  小山懒得再搬出旧电脑了,这里的截图借用别人的。

Burning Tool

  等待上方那个紫色的进度条变绿,提示烧录成功,这时候不要着急拔掉 N1,先点击烧录工具的 【停止】,再关闭烧录工具,然后拔掉 N1,断电,通电开机。
  首次启动大约需要 3-4 分钟,请耐心等待。
  系统启动后,会提示遥控器配对,因为用了 T1 的一些东西,直接跳过即可。
  然后联网,安装一些直播、点播视频应用,就可以完完整整的当一个电视盒子来用了。
  操控方面,可以使用天天链里的遥控器,也可以自己买个蓝牙遥控器,这个看个人喜好。
  如果你刷了 webpad 的固件,在浏览器输入 IP:8081,既可管理离线下载、samba等软件。具体用法我就不多说了。

后话

  斐讯 N1 现在二手平台仅卖 70 元,但 N1 的配置是跟那些两三百的电视盒子不相上下的,可谓是非常的有性价比。
  如果你想入手一个电视盒子,或者是想买一个类似树莓派的玩具(不搞硬件开发)。那么可以考虑下 N1,做电视盒子绰绰有余,运行 Linux 后,就是一个没有硬件扩展性的树莓派,当然,我相信大多数人买树莓派是搞软件开发的。
  这是我目前觉得斐讯最有性价比的产品之一
  再次感谢 webpad 为 N1 可玩性做出的贡献
  下篇教程教大家如何在 N1 上运行完整的 Linux 发行版

  转载自 https://www.mivm.cn/phicomm-n1-unofficial/

流水账记录下 Centos 7 配置 frp 服务端与客户端的全过程

下载 frp:https://github.com/fatedier/frp/releases,解压到 /usr/local/frp 目录下

服务端:
编辑四个文件:
/usr/local/frp/frps_full.ini(配置文件,视情况编辑)

/usr/lib/systemd/system/frps.service

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=frps
After=network.target

[Service]
Type=forking
ExecStart=/etc/cron.hourly/frps
ExecReload=/usr/bin/frpsreload
ExecStop=/usr/bin/killall frps
PrivateTmp=true

[Install]
WantedBy=multi-user.target

/etc/cron.hourly/frps

1
2
3
4
5
6
#!/bin/sh
echo $(date +"%Y-%m-%d %H:%M:%S") > /tmp/frpTimestamp
ps aux | grep "frps -c" | grep -v grep
if [ $? -ne 0 ];then
nohup /usr/local/frp/frps -c /usr/local/frp/frps_full.ini >> /root/frp.log 2>&1 & echo $! > /var/run/frp-server.pid
fi;

/usr/bin/frpsreload

1
2
3
#!/bin/sh
kill -9 $(cat /var/run/frp-server.pid)
nohup /usr/local/frp/frps -c /usr/local/frp/frps_full.ini >> /root/frp.log 2>&1 & echo $! > /var/run/frp-server.pid

然后执行:

1
2
systemctl enable frps
systemctl start frps

最后是 nginx 反代设置:
/usr/local/nginx/conf/vhost/pi.imjs.0cdn.cn.conf

1
2
3
4
5
6
7
8
9
10
11
server {
listen 80;
server_name pi.imjs.0cdn.cn *.pi.imjs.0cdn.cn;

location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host:8080;
}
}

客户端:
编辑四个文件:
/usr/local/frp/frpc_full.ini(配置文件,视情况编辑)

/usr/lib/systemd/system/frp.service

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=frp
After=network.target

[Service]
Type=forking
ExecStart=/etc/cron.hourly/frp
ExecReload=/usr/bin/frpreload
ExecStop=killall frp
PrivateTmp=true

[Install]
WantedBy=multi-user.target

/etc/cron.hourly/frp

1
2
3
4
5
6
#!/bin/sh
echo $(date +"%Y-%m-%d %H:%M:%S") > /tmp/frpTimestamp
ps aux | grep "frpc -c" | grep -v grep
if [ $? -ne 0 ];then
ntpdate ntp1.aliyun.com && (nohup /usr/local/frp/frpc -c /usr/local/frp/frpc_full.ini >> /root/frp.log 2>&1 & echo $! > /var/run/frp-client.pid)
fi;

/usr/bin/frpreload

1
2
3
#!/bin/sh
kill -9 $(cat /var/run/frp-client.pid)
nohup /usr/local/frp/frpc -c /usr/local/frp/frpc_full.ini >/dev/null 2>&1 & echo $! > /var/run/frp-client.pid

最后执行:

1
2
systemctl enable frp
systemctl start frp

清除windows访问Samba的访问记录

在 windows 中访问 Samba 服务器后,windows 会存储访问记录,比如密码。当我们想清除密码,重新输入时,步骤如下:
1. 获取访问记录

1
2
3
4
5
6
7
8
#在windows的命令行(cmd)中运行net use,可见访问Samba服务器的记录:
C:\Users\User>net use
会记录新的网络连接。
状态 本地 远程 网络

-------------------------------------------------------------------------------
OK \\192.168.2.1\IPC$ Microsoft Windows Network
命令成功完成。

2. 删除访问记录

1
2
C:\Users\User>net use \\192.168.2.1\IPC$ /del /y
\\192.168.2.1\IPC$ 已经删除。

3. 尝试重新登陆Samba