前言
在家搞了一台服务器(其实就是旧台式机),系统选择Debian。主要之前VPS使用过几次(Amazon和Google),都是选Debian系统,感觉不错。最重要比较熟悉了,不想换别的重新适应。
问题
装系统我是先找个显示器接,使用U盘装,装时不选桌面,但选了SSH server。网络使用网线接的以太网。装完后记得开启OpenSSH,防火墙放开22端口,我使用ufw来管理防火墙问题。由于我这台服务器要放到另一间房间,路由器太远,不适合继续使用网线,所以选择使用无线网卡。由于我的网卡驱动已自行处理完没问题,接下来就是处理开机自动连接网络,静态ip的问题。
工具
记得先安装一些工具sudo apt install wpa_supplicant net-tools net-stat
无线网络配置
- 将要连接的无线网络名称和密码示例是
名称: Home_Wifi 密码: homepassword2021
- 执行以下命令,将无线网络配置信息存到一个文件上,目录可以自行选择。这里选择存在
/etc/wpa_supplicant/wpa_supplicant.conf
文件。
命令执行成功,sudo wpa_passphrase Home_Wifi homepassword2021 > /etc/wpa_supplicant/wpa_supplicant.conf
cat /etc/wpa_supplicant/wpa_supplicant.conf
查看大概如下network={ ssid="Home_Wifi" #psk="homepassword2021" psk=ccb290fd4fe6b22935cbae31449e050edd02ad44627b16ce0151668f5f53c01b //这里我随便找的示例,反正大概就是一串字符。 }
- 编辑
/etc/network/interfaces
文件
在最后添加以下信息sudo vim /etc/network/interfaces
其中# my wifi device auto wlan0 allow-hotplug wlan0 iface wlan0 inet static address 192.168.1.166 netmask 255.255.255.0 gateway 192.168.1.1 pre-up wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf post-down killall -q wpa_supplicant
wlan0
是你的无线网卡名称,自行ip a
来查看叫什么。这里这段看也看得懂,主要设置静态ip,我设置192.168.1.166
iface wlan0 inet static address 192.168.1.166 netmask 255.255.255.0 gateway 192.168.1.1
- 上面弄完了就好了,现在执行
记得wlan0是无线网卡名称,请先找到自己的无线网卡名称。sudo ifup wlan0
- 没问题的话网络就已连接。
ifup
命令其实是使用/etc/network/interfaces
配置文件来设置网络的ifconfig
也能设置。要想关闭请使用ifdown wlan0
。
USB网络共享配置
有时想要使用手机Usb网络共享网络怎么办,方法大致相同,好像也是能用/etc/network/interfaces
配置文件,但我选择使用ifconfig
命令。
- 执行
ip a
查看你的usb连接名称,通常是usb0
- 执行
sudo ifconfig usb0 up
来启用目标设备,sudo ifconfig usb0 down
是关闭目标设备。 - 执行
sudo dhclient usb0
来自动分配ip地址。 - 如果要静态ip,则是执行
sudo ifconfig usb0 192.168.1.167 netmask 255.255.255.0
,其中192.168.1.167
是你要设置的静态ip。
断网重连和Usb网络设置
网络断了不会自动重连,所以我自己写了一个Python脚本来重连,另外自动设置上面的Usb网络共享。原理是隔一段时间ping
看看能不能通,不能通可用认为断网了,就执行shell命令重连sudo systemctl restart networking
。
#!/usr/bin/python3
# ./AutoReconnectNetwork/main.py
import sys, subprocess, time, functools
targethost = "8.8.8.8" #ping domain
waitToCheck = 60 * 5 #interval of check(seconds)
startAfter = 60 #start script after time(seconds)
print = functools.partial(print,flush=True)
def checkNetworkPass():
result = subprocess.run(f"ping -c 2 {targethost}", shell=True, capture_output=True)
return result.stdout and result.stdout.decode("utf-8").find("2 received") != -1
def restartNetworking():
subprocess.run("systemctl restart networking", shell=True, capture_output=True)
def existDevice(deviceName):
result = subprocess.run(f"ip link show {deviceName}", shell=True, capture_output=True)
return result.stdout and result.stdout.decode("utf-8").find("does not exist") == -1
def restartUsb():
tarusb = "usb0"
if existDevice(tarusb):
print(f"Exists {tarusb}, restarting it..")
subprocess.run(f"ifconfig {tarusb} up", shell=True, capture_output=True)
subprocess.run(f"ifconfig {tarusb} 192.168.1.167 netmask 255.255.255.0", shell=True, capture_output=True)
else:
print(f"No exists {tarusb}.")
def checkArgv():
for a in sys.argv:
if a == "-t":
global startAfter
startAfter = 0
if __name__ == "__main__":
checkArgv()
print(f"Starting script after {startAfter} seconds:")
time.sleep(startAfter)
print("====================")
print("[Config]")
print(f"Target host: {targethost}")
print(f"Wait to check: {waitToCheck}")
print("====================")
print("Now runing script...")
while True:
print("Check networking...")
if checkNetworkPass():
print("Networking normal..")
else:
print("Networking not access, trying restart networking..")
restartNetworking()
print("Networking restart done...")
restartUsb()
print(f"Wait {waitToCheck} seconds to check again...")
time.sleep(waitToCheck)
保存在一个目录下即可,新建文件夹AutoReconnectNetwork
,保存在里面为main.py
。执行sudo python3 ./AutoReconnectNetwork/main.py -t
来测试看看。关于Usb网络共享,请自行修改变量:
def restartUsb():
tarusb = "你的usb设备名称"
...
...
脚本开头的一些变量写了注释,应该看得懂吧。由于我有无线网卡能用,不用usb共享网络,所以只有我已插上了usb线连接手机共享网络,脚本检测到了才帮我设置usb网络共享。检测时间和检测网络是否可用一致。
脚本肯定要开机自启动,然后后台运行的,我使用systemd管理。先写个简单的service配置:
[Unit]
Description=Auto reconnect wifi when no access networking.
ConditionPathExists=/home/jinker/src/AutoReconnectNetwork/main.py
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/python3 /home/jinker/src/AutoReconnectNetwork/main.py
[Install]
WantedBy=multi-user.target
其中ConditionPathExists
和ExecStart
是你的脚本路径。ExecStart
那边确保python3路径存在。将这个service配置保存为AutoReconnectNetwork.service
放到/usr/lib/systemd/system/
下。
执行sudo systemctl enable AutoReconnectNetwork.service
来开机自启。
执行sudo systemctl start AutoReconnectNetwork.service
来启动服务。
执行sudo systemctl status AutoReconnectNetwork.service
来看服务状态。
脚本默认启动后60秒才检测,然后每5分钟再检测。你可以自行修改。
结论
主要记录下,方便以后我折腾。