前天树莓派 netctl-auto 突然出了奇怪的问题,导致启动后不能连接热点,没法 SSH。没有 TTL 线,只有一根网线却没有路由器怎么办呢? Google 一下,只用一根网线而不经路由器连接树莓派是可以实现的:ubuntu unity 里有通过有线网卡“分享连接”的功能,windows 也有类似的实现,可是我的 gnome 却没有…… 思考下,想起这个,非 ubuntu linux 实现起来也是没有难度的。
¶0. 内核开启转发
运行 sysctl net.ipv4.ip_forward=1
¶1. 查看有线网卡接口名
ifconfig
查看,一般是 eth0
¶2. 解除 NetworkManager 对接口的管理
因为我用 networkmanager 管理连接,它似乎不支持路由功能。解除它对有线接口的管理以防干扰,编辑 /etc/NetworkManager/NetworkManager.conf
,[keyfile]
下加入 unmanaged-device=mac:...
,后接 eth0
MAC 地址。
¶3. 指定有线接口的 ip 地址
ip addr add 10.0.1.100/32 dev eth0
指定 eth0
在内网要用的 ip
¶4. 添加 DHCP 配置和 DHCP 服务器
在 /etc/dhcpd.conf
添加一块
option routers 10.0.1.100;
option subnet-mask 255.255.255.0;
subnet 10.0.1.0 netmask 255.255.255.0 {
range 10.0.1.150 10.0.1.250;
}
然后新增接口上的 DHCP 服务器。保存 /etc/systemd/system/dhcpd4-eth0.service
[Unit]
Description=IPv4 DHCP server on eth0
Wants=network.target
After=network-pre.target
Before=network.target
[Service]
Type=forking
PIDFile=/run/dhcpd4-eth0.pid
ExecStartPre=/usr/bin/ifconfig eth0 up
ExecStart=/usr/bin/dhcpd -4 -q -pf /run/dhcpd4-eth0.pid
KillSignal=SIGINT
[Install]
WantedBy=multi-user.target
运行 systemctl daemon-reload
使之生效
¶5. iptables 配置
如果希望插上网线后树莓派还能通过电脑联网,运行下面添加 iptables 规则。否则就可以省略这一步了。
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED
iptables -A FORWARD -i eth0 -j ACCEPT
启动 DHCP systemctl start dhcpd4-eth0
,网线两头插上电脑和树莓派,稍后 systemctl status dhcpd4-eth0
可看到给树莓派分配的 ip,这样就能顺利 SSH 连接上了!