树莓派快速起步

树莓派官网可以下载

sudo dd if=2017-11-29-raspbian-stretch-lite.img of=/dev/sdb bs=4M

配置树莓派初始环境

为了能够通过网线直接连接笔记本电脑,所以简化设置树莓派采用静态IP地址。

我采用笔记本电脑直接连接一条短网线和树莓派通讯,中间不经过交换机。树莓派的电源由笔记本电脑的USB口供电。

  • 将树莓派B3的TF卡通过USB转接器连接到笔记本的USB接口,识别成/dev/sdb

  • 挂载/dev/sdb2(Linux分区)到/mnt分区,然后就可以修改配置:

mount /dev/sdb2 /mnt

采用chroot方式切换到树莓派环境

为了能够让树莓派第一次启动就进入预设环境(设置静态IP地址,启动ssh服务,设置密码),在前面完成树莓派TF卡文件系统挂载到笔记本(Linux操作系统)之后,采用chroot切换到树莓派环境。这样就可以模拟运行了树莓派操作系统,并且所有修改都会在树莓派环境生效。

注意:

如果你没有使用chroot切换到树莓派操作系统环境。则下文中所有编辑配置文件都是在/mnt目录下的子目录,例如/mnt/etc/dhcpcd.conf配置文件就是树莓派的配置文件/etc/dhcpcd.conf/mnt/etc/network/interfaces对应树莓派配置文件/mnt/etc/network/interfaces

mount -t proc proc /mnt/proc
mount --rbind /sys /mnt/sys
mount --make-rslave /mnt/sys
mount --rbind /dev /mnt/dev
mount --make-rslave /mnt/dev

进入树莓派系统

chroot /mnt /bin/bash
source /etc/profile
export PS1="(chroot) $PS1"

设置有线网卡静态IP

  • /network/interfaces

这个配置文件是动态配置的,实际配置需要在dhcpcd.conf中配置

  • 修改 /etc/dhcpcd.conf(在这个配置文件的最后部份有静态配置的案例)

# Example static IP configuration:
interface eth0
static ip_address=192.168.0.10/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
static routers=192.168.0.1
#static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1
static domain_name_servers=202.96.209.133

设置ssh默认启动

  • 激活ssh服务默认启动

sudo systemctl enable ssh
  • 启动ssh服务

sudo systemctl start ssh

设置pi用户帐号密码和root密码

注意:默认的树莓派用户帐号是pi,密码是raspberry,一定要第一时间修改成复杂密码,避免安全漏洞。此外,还要设置root用户密码。

sudo su -
passwd pi
passwd

以上3个命令是为了切换到超级用户root帐号下,然后分别为pi用户设置密码,以及为自己(root)设置密码。

启动

现在可以启动树莓派,很简单,将USB线连接到笔记本电脑上提供电源,另外将网线连接树莓派网口和笔记本网口,笔记本网卡配置192.168.0.1/24就可以联通网络。

在笔记本上输入如下命令通过ssh登录树莓派:

ssh pi@192.168.0.10

IP masquerade

上述通过网线直接连接树莓派和笔记本电脑虽然非常方便(无需交换机),也便于移动办公。但是此时树莓派尚未连接因特网,对于在线安装和更新软件非常不便。

简单的解决方法是使用iptables的NAT masquerade,即在笔记本(相当于树莓派的网关)输入如下命令(或执行脚本):

sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o wlp3s0 -j MASQUERADE
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

注意在使用firewalld的时候,不需要执行以上iptables命令,后面有案例在firewall-cmd中开启masquerade。

-t nat -A POSTROUTING -j MASQUERADE即可以实现网络地址转换

第2条指令是开启IP转发

这里遇到一个问题:在NAT之后的树莓派可以ping通外网,但是DNS解析却不能成功,虽然从笔记本电脑上检查iptables -nat -L中已经包含如下IP masquerade:

MASQUERADE  all  --  192.168.0.0/24       anywhere

原因是:Fedora默认开启了firewalld防火墙,只允许ICMP数据包通过,这样笔记本电脑接收到ping包后,可以转发给外网并回传,但是其他TCP和UDP数据包没有放行。

解决方法参考设置Fedora/CentOS 7作为路由器

  • 首先检查有哪些激活的zone

$ sudo firewall-cmd --get-active-zones
public
  interfaces: enp0s20u1 wlp3s0

可以看到有线网卡和无线网卡都默认设置为 public,所以默认拒绝外部访问。

  • 检查有那些可用的zone

$ firewall-cmd --get-zones
FedoraServer FedoraWorkstation block dmz drop external home internal public trusted work
  • 现在检查dmz区域尚无接口

$ sudo firewall-cmd --zone=dmz --list-all
dmz
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:
  • 将接口enp0s20u1迁移到 DMZ 区

$ sudo firewall-cmd --zone=dmz --change-interface=enp0s20u1
The interface is under control of NetworkManager, setting zone to 'dmz'.
success
  • 再次检查激活区域

]$ firewall-cmd --get-active-zones
dmz
  interfaces: enp0s20u1
public
  interfaces: wlp3s0
  • 添加dmz区域允许访问的服务

# firewall-cmd --permanent --zone=dmz --add-service={http,https,ldap,ldaps,kerberos,dns,kpasswd,ntp,ftp}
# firewall-cmd --reload

这样就使得树莓派能方位外部服务端口(实际上是在笔记本网卡接口上开启了这些服务的端口允许访问)

  • 启用端口转发

echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/ip_forward.conf 

sudo sysctl -w net.ipv4.ip_forward=1
  • 通过firewall-cmd启用MASQUERADE

firewall-cmd --permanent --zone=public --add-masquerade
firewall-cmd --reload

软件包安装

如果采用最小的raspberry pi安装镜像,安装以后还需要一些工具包,可以参考Debian最小化安装后的软件包安装建议

sudo apt install screen wget curl bzip2 xz-utils sysstat unzip nfs-common ssh \
mlocate dnsutils git gcc g++ make sudo curl flex autoconf automake python

时区

默认时区是UTC,和中国差距8小时,所以需要修改时区:

sudo unlink /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

这样就能看到正确的时间显示。

其他

接下来,通过硬盘扩展卡,为树莓派添加一个大容量硬盘,从USB硬盘启动树莓派构建一个完整的微型服务器。

参考

Last updated