基于ubuntu搭建双线adsl路由器和私有云服务器(samba、ftp和http)

摘要:本文内容包括硬件环境介绍、软件环境介绍、设置双线adsl网络配置文件interfaces、adsl断线自动重拨、配置内网dhcp服务和内网路由器、配置双线adsl路由表、利用AliDDNS实现域名和动态IP绑定、安装和配置ftp和samba服务

1. 目的

谨以此文纪念2020年春节的新型冠状流行期的生活,感谢医务人员和其他为我们提供生活保障的人们!
搭建一个稳定和快速的服务器,并提供稳定和快速的路由、SAMBA文件共享服务、ftp文件共享服务和http网页服务,能实现SAMBA传输速度50M/S以上,在外出差时也能随时通过安卓手机APP:ES文件浏览器或电脑:filezilla访问服务器上的资料。这些功能通常,可以用购买家用网络硬盘或某些路由器提供的附带USB共享服务,但缺点一是速度慢,二是不稳定,三是不能提供ftp服务供在外出差时访问。例如TP-LINK等路由器内置了花生壳和端口转发的功能,由于稳定性问题,经常会出现连接不上服务器的情况。
本文的最新版本随时在:http://www.hasil.top:808/06-网络配置、软路由、WIFI热点、SAMBA和FTP服务器搭建/基于ubuntu18.04搭建双线adsl路由器和私有云服务器(samba、ftp和http).txt
更新。

2. 使用环境

2.1 硬件环境

最好用大品牌的旧笔记本电脑,因为通常笔记本电脑稳定性比普通的台式机要稳定得多,而且耗电量很少。

本文有些命令行和配置文件中的行显示为两行,实际上是一行,请根据上下文自行判断

所有命令和配置文件中的标点符号均为英文标点符号。

同时,由于字体显示的原因,1(数字1)、l(小写字母l)、I(大写字母I)、o(小写字母o)、O(大写字母O)和0(数字0),可能有些时候会分不清,这时可以换不同的字体和选择不同的文本编辑器进行分辨。

sudo lspci
#显示当前电脑硬件,本人使用6年前的笔记本电脑acer1810tz,硬件环境如下,以下凡以sudo开头到#前为止的内容均为需要输入并运行的命令。

00:00.0 Host bridge: Intel Corporation Mobile 4 Series Chipset Memory Controller Hub (rev 07)
00:02.0 VGA compatible controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)
00:02.1 Display controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)
00:1a.0 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 03)
00:1a.7 USB controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 03)
00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 03)
00:1c.3 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 4 (rev 03)
00:1d.0 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03)
00:1d.1 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03)
00:1d.2 USB controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03)
00:1d.7 USB controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 93)
00:1f.0 ISA bridge: Intel Corporation ICH9M-E LPC Interface Controller (rev 03)
00:1f.2 SATA controller: Intel Corporation 82801IBM/IEM (ICH9M/ICH9M-E) 4 port SATA Controller [AHCI mode] (rev 03)
00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 03)
01:00.0 Ethernet controller: Qualcomm Atheros AR8131 Gigabit Ethernet (rev c0)
02:00.0 Network controller: Intel Corporation Centrino Wireless-N 1000 [Condor Peak]

另外还有enxfb #毕亚兹USB有线网卡(RTL8153芯片)一块和enxd3、enxd7 #TP-LINK TL-UG310 USB3.0有线网卡两块

sudo cat /proc/cpuinfo #显示CPU信息
model name : Genuine Intel® CPU U4100 @ 1.30GHz
主力1000M飞鱼星双WAN口无线路由器一个
TKLINK无线路由器一个

2.2 软件环境

ubuntukylin 18.04 desktop amd64版(以下简称麒麟18.04或qilin18.04),安全相关的软件更新至2020.2.4
推荐到:mirrors.163.com/ubuntu-releases/
下载
也可到:http://www.hasil.top:808
下载
优点如下:
1)麒麟18.04对USB有线网卡支持很好,即插即用,这点对笔记本极为重要。对我手上的毕亚兹USB有线网卡和TP-LINK TL-UG310有线网卡都支持,还有一款EDUP的USB口一拖三有线网卡也支持,推荐购买TP-LINK TL-UG310有线网卡。
2)对中文支持很好,特别是命令行模式下,中文都不乱码,原生的ubuntu就做不到,资深IT人员可以做到完全中文化,普通工科男就不必在这上面花时间了,现成的就好。

2.3 网络环境

本人搭建网络环境如下:

联通ADSL猫(有公网IP)=(TPLINK USB有线网卡A)麒麟18.04(AR8131网卡)=(LAN口)飞鱼星路由器(LAN口/WIFI)=其他电脑/手机

广电ADSL猫(无公网IP)=(TPLINK USB有线网卡B)麒麟18.04(毕亚兹USB有线网卡)=(LAN口)TPLINK路由器(LAN口/WIFI)=其他电脑/手机

为什么会有这么奇葩的配置,主要原因是飞鱼星路由器和TPLINK路由器内置的动态域名服务均不支持阿里云DDNS服务,而Oray的DDNS服务有点小贵,但阿里云的DDNS服务仅支持有公网IP的网络。以上网络配置既能保证麒麟18.04实现本文的功能,又能分担飞鱼星路由器WIFI的压力。

3. install qilin18.04-amd64

Ubuntu的安装方法如下(也可自行搜索其他方法,懂的跳过):
http://www.hasil.top:808/02-系统安装/ubuntu-xubuntu-installation
安装时一定要有网络,否则安装会失败,还有一点:安装时将“安装时下载软件和更新”选项前的钩取消,否则系统将使用netplan而不是networking来管理网络,而配置netplan的学习资料不多。

4. 检查网卡是否正确安装

打开终端,输入:
sudo apt-get install net-tools
#安装网络工具,包括ifconfig或ip命令工具
sudo ifconfig 或 ip a
if correct, the samiliar display will be as below:
enp1s0 Link encap:以太网 硬件地址
inet6 地址: Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
接收数据包:544 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:418 错误:0 丢弃:0 过载:0 载波:1
碰撞:0 发送队列长度:1000
接收字节:57442 (57.4 KB) 发送字节:33700 (33.7 KB)

lo Link encap:本地环回
inet 地址:127.0.0.1 掩码:255.0.0.0
inet6 地址: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 跃点数:1
接收数据包:12 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:12 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:1000
接收字节:552 (552.0 B) 发送字节:552 (552.0 B)

wlp2s0 Link encap:以太网 硬件地址
inet 地址:169.254.219.96 广播:169.254.219.255 掩码:255.255.255.0
inet6 地址: Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
接收数据包:3004 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:137 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:1000
接收字节:826293 (826.2 KB) 发送字节:21974 (21.9 KB)

另外三块USB网卡名称为:TPLINK USB有线网卡A简写为enxd3,TPLINK USB有线网卡B简写为enxd7,毕亚兹USB有线网卡A简写为enxfb

5. 安装必要软件

首先在mate桌面的软件中心,选择软件源,推荐华为源或163的源,取消不稳定软件前的钩。
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install isc-dhcp-server bridge-utils linux-igd ppp pppoe pppoeconf
#上面的bridge-utils linux-igd 也可以不装

6. config network

6.1 config ADSL

sudo pppoeconf enxd3
#配置联通ADSL网络,请将enxd3替换为您自己的网卡名,通过ifconfig显示,下同
注意当配置窗口问及:是否需要开机启动拨号程序时,建议回答“否”,其他选择默认
sudo ifconfig ppp0
if correctly connect to internet, the samiliar display will be as below:
ppp0 Link encap:Point-to-Point Protocol
inet addr:101.204.148.108 P-t-P:101.204.148.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:497794 errors:0 dropped:0 overruns:0 frame:0
TX packets:268948 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:422905325 (422.9 MB) TX bytes:18754324 (18.7 MB)
or
sudo ping www.news.cn -c3
if pppoeconf is correct and ppoe is running, the samiliar display will be as below:
PING cc00008.h.cnc.lxsvc.cn (113.207.34.20) 56(84) bytes of data.
64 bytes from 113.207.34.20: icmp_seq=1 ttl=56 time=10.3 ms
64 bytes from 113.207.34.20: icmp_seq=2 ttl=56 time=11.3 ms
64 bytes from 113.207.34.20: icmp_seq=3 ttl=56 time=12.0 ms
— cc00008.h.cnc.lxsvc.cn ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
如果没有配置好,请重新配置。
sudo pon dsl-provider
#手动启动ADSL拨号程序
sudo poff dsl-provider
#手动挂断ADSL拨号程序

以下步骤专为双线ADSL,单线ADSL的跳过
sudo cp /etc/ppp/peers/dsl-provider /etc/ppp/peers/dsl-provider-enxd3
sudo pppoeconf enxd7
#配置联通ADSL网络
sudo cp /etc/ppp/peers/dsl-provider /etc/ppp/peers/dsl-provider-enxd7
有动手能力的可以跳过sudo pppoeconf enxd7直接cp /etc/ppp/peers/dsl-provider /etc/ppp/peers/dsl-provider-enxd7并修改该配置文件,并将第二条adsl线路的用户名和密码添加到/etc/ppp/pap-secrets文件中

sudo nano /etc/network/interfaces
配置文件如下:
auto lo
iface lo inet loopback

auto enp1s0
#AR8131有线网卡连飞鱼星路由器
iface enp1s0 inet static
address 169.254.219.6
netmask 255.255.255.0
broadcast 169.254.219.255
#由于本身为服务器,不需配置gateway和dns name server

auto enxfb
#毕亚兹USB有线网卡连TPLINK路由器
iface enxfb inet static
address 169.254.218.6
netmask 255.255.255.0
broadcast 169.254.218.255
#由于本身为服务器,不需配置gateway和dns name server

auto enxd3
#TP-LINK TL-UG310有线网卡A连联通猫
iface enxd3 inet manual
iface dsl-provider-enxd3 inet ppp
pre-up /bin/ip link set enxd3 up # line maintained by pppoeconf
provider dsl-provider-enxd3

auto enxd7
#TP-LINK TL-UG310有线网卡B连广电猫
iface enxd7 inet manual
iface dsl-provider-enxd7 inet ppp
pre-up /bin/ip link set enxd7 up # line maintained by pppoeconf
provider dsl-provider-enxd7

配置完成后,拨号和挂断拨号的命令变为:
sudo pon dsl-provider-enxd3或sudo pon dsl-provider-enxd7
sudo poff dsl-provider-enxd3或sudo pon dsl-provider-enxd7
以上步骤专为双线ADSL,单线ADSL的跳过

sudo nano /etc/rc.local
单线ADSL在exit 0行前插入一行:
pon dsl-provide
按Ctrl+x退出并保存,以便每次启动电脑时自动拨号上网。

双线ADSL在exit 0行前插入一行,注意请将有公网IP的网络放在前面,本例中联通网络在前,广电网络在后:

pon dsl-provide-enxd3
sleep 2
pon dsl-provide-enxd7
sleep 2
按Ctrl+x退出并保存,以便每次启动电脑时自动拨号上网。

ubuntu从16.04开始,已取消通过rc.local来开机自启动程序,恢复rc.local参考如下文件或自行百度:
http://www.hasil.top:808/05-软件安装及使用/在ubuntukylin-18.04中设置rc.local和systemd.txt

另一种开机自动拨号方法:
可以在/etc/profile.d下创建一个脚本文件,不需要以#!/bin/bash开头,也不需要将文件设置为可执行属性。
sudo nano /etc/profile.d/pppoe.sh
示例脚本如下:
#startup pppoe program
pon dsl-provider
#该脚本可以实现在用户登录时自动进行ADSL拨号,双线ADSL的对照前文修改。

6.2 使pppoe断线自动重拨

编辑ppp配置文件,这里修改/etc/ppp/peers/dsl-provider而不是修改/etc/ppp/peers/options是因为,dsl-provider文件下的配置会覆盖options下的配置,所以我们只需要修改dsl-provider就可以了
sudo nano /etc/ppp/peers/dsl-provider或dsl-provide-enxd3和dsl-provide-enxd7
找到:
lcp-echo-interval 30 #也可能是其他数值
改为:
lcp-echo-interval 20
找到:
lcp-echo-failure 10 #也可能是其他数值
改为:
lcp-echo-failure 3
lcp-echo-interval指令代表系统每20秒会向 ADSL 服务器发出echo request以确认连线是否正常,lcp-echo-failure指令代表发送多少次以后判断为断线。连起来就是:如果ADSL服务器在60秒 (20 秒 x 3) 都没有回应,系统会假定连线有问题,自动断开。如果您所处的网络环境较差的话,可以增加次数可以避免网络环境较差的用户被误判断线。

继续搜索:
persist
如果没有找到则在配置文件中添加此指令,或者删除前面#取消其注释。
persist指令代表持续连接。使用这个指令以后,如果上面的lcp-echo-interval 30和lcp-echo-failure 10(也就是300秒)判断ppp断线以后,不是退出ppp,而是重新拨号。
这样配置好以后,重启连接,你的ppp软件就支持断线自动重拨了:

如果长时间运行后,发现有断线没法连接上的问题,一般情况下是pppd进程在ADSL断线以后会自动进行重拨尝试,但是尝试10次以后如果还没连接上就会退出进程。对于需要长期在线的计算机来说,这样就不能进行自动重拨了,因为它已经自己退出了进程,所以我们可以为Linux增加一个判断脚本,并定期执行。如果成功拨号会在/run目录下添加ppp0.pid文件,这个文件记录了当前pppd进程pid。我们利用脚本判断这个文件是否存在就能判断出是否pppd是否已经连接。

sudo nano /usr/bin/repppoe
单线ADSL加入以下内容:

  #!/bin/bashif [ -e /run/ppp0.pid ]; then#如果在/run下找到有ppp0进程exit 0elsepoff dsl-providersleep 1pon dsl-providerfiexit 0

双线ADSL加入以下内容:

  #!/bin/bashif ![ -e /run/ppp0.pid ]; then#如果在/run下没有找到有ppp0进程poff dsl-provider-enxd3sleep 1pon dsl-provider-enxd3fiif [ -e /run/ppp1.pid ]; thenexit 0elsepoff dsl-provider-enxd7sleep 1pon dsl-provider-enxd7fiexit 0

双线ADSL加入以上内容:

然后,
sudo chmod a+x /usr/bin/repppoe #修改文件属性为所有用户增加可执行权限
设置crontab每11分钟检测执行一次脚本:
sudo nano /etc/crontab
在文件末尾加入新的一行(要求系统每11分钟运行一次repppoe程序):
*/11 * * * * root /usr/bin/repppoe

还有一种方法也可以实现以上功能:
sudo nano /usr/bin/repppoe

单线ADSL加入以下内容:

  #!/bin/bashping -c1 -s1 www.taobao.comif [ $? -ne 0 ]; then#$?为上一条命令的执行结果,成功时为0,不成功为非零,-eq为等于,-ne不等于,-gt大于,-lt 小于,-ge大于等于,-le 小于等于sleep 1ping -c1 -s1 www.sohu.comif [ $? -ne 0 ]; thenecho "ppp0 is break! redial ppp0 now!"sleep 1poff dsl-providersleep 1pon dsl-providerexit 0fifi

双线ADSL加入以下内容:

  #!/bin/bashDNS1="www.taobao.com"DNS2="www.sohu.com"ping -c1 -s1 -I ppp0 $DNS1if [ $? -ne 0 ]; then#$?为上一条命令的执行结果,成功时为0,不成功为非零,-eq为等于,-ne不等于,-gt大于,-lt 小于,ge大于等于,le 小于等于sleep 1ping -c1 -s1 -I ppp0 $DNS1if [ $? -ne 0 ]; thenecho "ppp0 is break! redial ppp0 now!"sleep 1poff dsl-provider-enxd3sleep 1#为什么是dsl-provider-enxd7见前文pon dsl-provider-enxd3fifisleep 2#等待2秒ping -c1 -s1 -I ppp1 $DNS1if [ $? -ne 0 ]; then#$?为上一条命令的执行结果,成功时为0,不成功为非零,-eq为等于,-ne不等于,-gt大于,-lt 小于,ge大于等于,le 小于等于sleep 1ping -c1 -s1 -I ppp1 $DNS2if [ $? -ne 0 ]; thenecho "ppp1 is break! redial ppp1 now!"sleep 1poff dsl-provider-enxd7sleep 1pon dsl-provider-enxd7exit 0fifiexit 0

双线ADSL加入以上内容:

然后,
sudo chmod a+x /usr/bin/repppoe
#修改文件属性为所有用户增加可执行权限
sudo nano /etc/crontab
在文件末尾加入新的一行,每11分钟执行程序一次:
*/11 * * * * root /usr/bin/repppoe >/dev/null

6.3 对/etc/network/interfaces文件的补充说明

注意ubuntu16.04及以后的18.04/19.04等有两种网络配置工具:
1)networking 无图形界面,通过修改/etc/network/interfaces配置文件工作
2)network-manager 图形界面配置工具,通过桌面的网络连接图标配置
以上两种工具可以同时运行,但注意一旦图形界面配置工具配置了的网络设备,则需要在/etc/network/interfaces中把相应网络设备删除,否则网络工作会不正常。推荐使用networking配置有线网卡,network-manager配置无线网卡,并在图形桌面中将network-manager下中所有的有线网卡的连接删除

/etc/network/interfaces中网卡DHCP的配置方式如下:
auto enxc9
#启动该网卡
iface enxc9 inet dhcp
#设置该网卡为dhcp模式
#dns-nameservers 119.6.6.6 221.10.251.52
#如果遇到DNS问题,取消本行前的#号,否则注释掉。上行两个IP地址间用一个空格分隔

/etc/network/interfaces中网卡静态地址的配置方式如下:
auto enxc9
#启动该网卡
iface enxc9 inet static
#设置该网卡为静态地址模式
address 192.168.1.6
#指定网卡的IP
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
#内网中路由器的IP
dns-nameservers 119.6.6.6 221.10.251.52
#需咨询您的ISP服务商提供DNS服务器IP,通常会在路由器网络连接信息中显示

/etc/network/interfaces中网桥的配置方式如下:
auto enp8s0f0
auto enp8s0f1
auto br0
#网桥作用是将enp8s0f0和enp8s0f1两网卡合2为1(br0),共用一个地址,以服务器为桥将另两个网络设备连接起来
iface br0 inet static
#为网桥指定静态地址
address 192.168.1.6
#指定网桥的地址,注意按您自己的网络修改
network 192.168.1.0
#指定网桥所在网段,注意按您自己的网络修改
netmask 255.255.255.0
broadcast 192.168.1.255
#指定网桥广播地址,注意按您自己的网络修改
bridge-ports enp8s0f0 enp8s0f1
#指定合并为网桥的真实网卡

7a. 配置单线adsl路由(双线adsl的跳过)

sudo nano /etc/rc.local
单线ADSL找到"exit 0" 在该行之前插入以下几行:
iptables -t nat -A POSTROUTING -s 169.254.219.0/24 -o ppp0 -j MASQUERADE
iptables -A FORWARD -s 169.254.219.0/24 -o ppp0 -j ACCEPT
iptables -A FORWARD -d 169.254.219.0/24 -m state --state ESTABLISHED,RELATED -i ppp0 -j ACCEPT
#以上三行作用为将192.168.1.0/24内部网段上(即连接网卡enx503eaa75xxxx的的所有IP包都转发到ppp0口(即连接ADSL猫的网卡enp1s0),从而实现内网电脑访问外网
#有些资料将192.168.1.0/24用enp1s0或br0代替,将ppp0用enp1s0代替,经本人验证均不能正常实现IP包的转发,当然这是建立在本人的环境条件和配置方法之上,
#也许别人不一样的配置方法在他的环境条件下也可以实现IP转发。
ip route flush cache
#刷新路由缓存

ubuntu从16.04开始,已取消通过rc.local来开机自启动程序,恢复操作参考如下文件:
http://www.hasil.top:808/05-软件安装及使用/在ubuntukylin-18.04中设置rc.local和systemd.txt

#iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j LOG --log-prefix “NEW_HTTP_CONN:” #从iptables到"NEW_HTTP_CONN:"显示为两行实为一行
#作用实时显示内网上电脑正在连接哪些网址,本人未启用该行,注释掉了

7b. 配置双线adsl路由表(单线adsl的跳过)

目的是将内网中经过ppp0发出的数据包到达目的地后返回的数据包又都从ppp0返回,内网中经过ppp1发出的数据包到达目的地后返回的数据包又都从ppp1返回。如果不进行双线adsl路由表的配置,就会出现本地网通过ppp0发出的数据包,返回到了ppp1,造成数据包丢失、网速变慢甚至某些程序不能正常工作。如AliDDNS-v2.0.sh和ping www.sohu.com -c3 -I ppp0或ppp1时会发现总有一条adsl不通。

辣条①号 2019年1月27日 Linux System 运维, 网络技术 156 0
吉祥快乐2020.2.22补充和修改
基本思路是分割访问。

#关闭防火墙、开启linux转发设置
sudo ufw disable
sudo nano /etc/sysctl.conf
找到:
#net.ipv4.ip_forward=1
修改为:
net.ipv4.ip_forward=1 #开启ipv4转发功能
#也可以通过在/etc/rc.local中添加一行echo 1 > /proc/sys/net/ipv4/ip_forward来达到开启IP4转发的功能

在麒麟18.04上创建两个路由表,CU(联通),GD (广电)添加到/etc/iproute2/rt-tables
sudo echo “200 CU” >> /etc/iproute2/rt-tables
sudo echo “300 GD” >> /etc/iproute2/rt-tables

创建脚本文件autoupdatert
sudo nano /usr/bin/autoupdatert

  #内容如下:#!/bin/bash## This script is auto update route table UC and GD due to IP changed after each redial of adsl, UC and GD shall be built in advance.tmpstr=".0"logsct="0"
#adsL0="ppp0"#第一个拨号成功的adsl连接,对应网卡enxd3和联通adsl猫enxd3="enxd3"#enxd3网卡设备名,对应ppp0和联通猫IP0=""#网卡enxd3拨号成功后获取的动态IPIP_A=""#网卡enxd3拨号成功后获取的动态IP的临时存放变量CU_GW=""#网卡enxd3拨号成功后获取的联通网关的IPCU_NET=""#网卡enxd3拨号成功后获取的动态IP所属的网段
#adsL1="ppp1"#第二个拨号成功的adsl连接,对应网卡enxd7和广电adsl猫enxd7="enxd7"#enxd7网卡的设备名,对应ppp1和广电猫IP1=""#网卡enxd7拨号成功后获取的动态IPIP_B=""#网卡enxd7拨号成功后获取的动态IP的临时存放变量GD_GW=""#网卡enxd7拨号成功后获取的广电网关的IPGD_NET=""#网卡enxd7拨号成功后获取的动态IP所属的网段
#eth1="enp1s0"#eth1网卡的设备名,对应内网网段LC_NET1eth2="enxfb"#eth2网卡的设备名,对应内网网段LC_NET2LC_NET1="169.254.219.0"#内网网段1,对应eth1LC_NET2="169.254.218.0"#内网网段2,对应eth2
#while true#设定循环条件一直成立,程序启动后除非手动kill进程,否则一直运行doif [ -e /run/ppp0.pid ]; then#如果ppp0进程号存在,说明存在ppp0这个连接IP0=`ifconfig $adsL0 | sed ':a ; N;s/\n/ / ; t a ; ' | awk -v head="inet " -v tail="  net" '{print substr($0, index($0,head)+length(head),index($0,tail)-index($0,head)-length(head))}' | sed s/[[:space:]]//g`#通过ifconfig命令获取ppp0拨号成功后获取的动态IP,sed将所有行合并为一行,awk获取指定头尾字符间的字符,sed去除空格if [ "$IP_A" = "" ] || [ "$IP_A" != "$IP0" ]; then#如果ppp0的动态IP变量为空(第一次循环),或ppp0的动态IP变量值与最新测到的ppp0的动态IP值不一样CU_GW=`ifconfig $adsL0 | sed ':a ; N;s/\n/ / ; t a ; ' | awk -v head="tion" -v tail="ppp " '{print substr($0, index($0,head)+length(head),index($0,tail)-index($0,head)-length(head))}' | sed s/[[:space:]]//g`#通过ifconfig命令获取ppp0拨号成功后获取的网关IP,sed将所有行合并为一行,awk获取指定头尾字符间的字符,sed去除空格CU_NET=${IP0%.*}#删除ppp0动态IP最后一个.号及右边的字符CU_NET=${CU_NET%.*}#删除ppp0动态IP最后一个.号及右边的字符CU_NET=$CU_NET$tmpstr$tmpstr#补齐.0.0形成ppp0动态IP的所属网段
#ip route flush table CU#清空table名为CU的联通路由表
#ip route add $CU_NET dev $adsL0 src $IP0 table CU#增加从ppp0的IP到所属网段的路由到路由表CU中ip route add default via $CU_GW table CU#增加ppp0的连接的ISP网关IP,与上句合起来作用为在CU路由表中设定,如果要从内网到达$CU_NET,需要从网卡ppp0出去
#ip rule add from $IP0 table CU#添加策略路由,从ppp0对应的动态IP来的数据包均遵从路由表CU的规定
#ip route add $LC_NET1 dev $eth1 table CU#增加本地网段地址1到网卡1的路由,确保从网卡eth1所属的本地网NET1传入的数据包能进入联通路由表ip route add $LC_NET2 dev $eth2 table CU#增加本地网段地址2到网卡2的路由,确保从网卡eth2所属的本地网NET2传入的数据包能进入联通路由表ip route add 127.0.0.0/8 dev lo table CU#建立网卡设备的本地回环ip route flush cache#刷新路由表IP_A=$IP0#将新的ppp0动态IP赋值给中间变量date >> /var/log/autoupdatertlog#输出当前时间到日志文件echo $adsL0 "flushed to route table CU" >> /var/log/autoupdatertlog#输出“刷新新的静态路由到路由表CU”到日志文件中fielsedate >> /var/log/autoupdatertlogecho "电脑没有ppp0的连接,更新对应的路由表失败,请检查网络连接后重新配置 !" >> /var/log/autoupdatertlogfi
#if [ -e /run/ppp1.pid ]; thenIP1=`ifconfig $adsL1 | sed ':a ; N;s/\n/ / ; t a ; ' | awk -v head="inet " -v tail="  net" '{print substr($0, index($0,head)+length(head),index($0,tail)-index($0,head)-length(head))}' | sed s/[[:space:]]//g`if [ "$IP_B" = "" ] || [ "$IP_B" != "$IP1" ]; thenGD_GW=`ifconfig $adsL1 | sed ':a ; N;s/\n/ / ; t a ; ' | awk -v head="tion" -v tail="ppp " '{print substr($0, index($0,head)+length(head),index($0,tail)-index($0,head)-length(head))}' | sed s/[[:space:]]//g`GD_NET=${IP1%.*}GD_NET=${GD_NET%.*}GD_NET=$GD_NET$tmpstr$tmpstr
#ip route flush table GD
#ip route add $GD_NET dev $adsL1 src $IP1 table GDip route add default via $GD_GW table GDip rule add from $IP1 table GDip route add $LC_NET1 dev $eth1 table GDip route add $LC_NET2 dev $eth2 table GDip route add 127.0.0.0/8 dev lo table GDip route flush cacheIP_B=$IP1date >> /var/log/autoupdatertlogecho $adsL1 "flushed to route table GD" >> /var/log/autoupdatertlogfielsedate >> /var/log/autoupdatertlogecho "电脑没有ppp1的连接,更新对应的路由表失败,请检查网络连接后重新配置 !" >> /var/log/autoupdatertlogfi
#let logsct++#日志数量自增1if [ "$logsct" -gt 2222 ]; then#如果日志数量大于2222echo "" > /var/log/autoupdatertlog#清空日志文件logsct="0"#日志数量归零fi
#sleep 222#每222秒循环一次done

sudo chmod ug+rx /usr/bin/autoupdatert
#为autoupdatert文件增加可执行属性

sudo nano /etc/rc.local
双线ADSL找到"exit 0" 在该行之前插入下面的内容:

  iptables -t nat -A POSTROUTING -s 169.254.219.0/24 -o ppp0 -j MASQUERADEiptables -t nat -A POSTROUTING -s 169.254.219.0/24 -o ppp1 -j MASQUERADEiptables -t nat -A POSTROUTING -s 169.254.218.0/24 -o ppp0 -j MASQUERADEiptables -t nat -A POSTROUTING -s 169.254.218.0/24 -o ppp1 -j MASQUERADE#确保每个内网网段发出的数据包都能被转发到ppp0和ppp1口
#sleep 11#等待11秒系统网络配置好后,再启用下面两条命令,确保生效
#ip route replace default scope global nexthop dev ppp0 weight 1 nexthop dev ppp1 weight 1#设置两条线路各50%的负荷,如果设置为weight 60和weight 40则表示两条线路各承担60%和40%的负荷#负载均衡(Load balancing),默认基于目的IP的负载均衡,实现路由器本身及local network都能实现负载均衡,并且是容错形式
#ip route flush cache#刷新路由表缓存
#/usr/bin/autoupdatert &
#启动脚本,自动定时检查双线adsl的动态IP,若有变化则自动更新联通和广电的路由表, &表示在后台运行进程

#iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j LOG --log-prefix “NEW_HTTP_CONN:” #从iptables到"NEW_HTTP_CONN:"显示为两行实为一行
#作用实时显示内网上电脑正在连接哪些网址,本人未启用该行,注释掉了

重启电脑后测试本地网络LC_NET1/2中的主机是否可以通过两条线路访问外网
ping -c3 www.sohu.com -I ppp0
ping -c3 www.sohu.com -I ppp1

并检查以下两条命令是否可正常运行
sudo curl -s whatismyip.akamai.com --interface ppp0
#获取adsl线路1的本机公网IP
sudo curl -s whatismyip.akamai.com --interface ppp1
#获取adsl线路2的本机公网IP

#下面两条命令分别监控两条线路的负荷情况,按ctrl+c退出
sudo tcpdump -i ppp0
sudo tcpdump -i ppp1

经实测,经过双线adsl路由配置后,本地网的上网速度明显比不配置路由要快。

8. 设置DNS

在麒麟18.04中实测,本步骤可以跳过,若出现DNS网址解析问题可以参照本节内容)
首先重启电脑
cat /etc/resolv.conf
如果发现没有ISP方提供的DNS,则需修改一个文件来实现,如果没有该文件和目录就手动创建
sudo nano /etc/resolvconf/resolv.conf.d/tail
将该文件内容修改如下:
nameserver 119.6.6.6
#请修改为您的ISP的DNS服务器地址
nameserver 221.10.251.52
#请修改为您的ISP的第二DNS服务器地址,没有的话删除本行

通常DNS的服务器IP地址可以在路由器的运行状态页面查到,如果你的ubuntu能正常拨号上网,可以通过

9. 配置dhcp server

sudo nano /etc/default/isc-dhcp-server
找到 “INTERFACES=”
设置为:
INTERFACES=“enp0s1 enxfb”
#连接到飞鱼星路由器和TPLINK路由器的两块网卡名,中间有一空格相隔

sudo nano /etc/dhcp/dhcpd.conf
找到:
option domain-name “example.org”;
修改为:
#option domain-name “example.org”; #或者替换为您的真实域名服务器的网址
找到:
option domain-name-servers XXX.XXX.XXX.XXX;
修改为:
option domain-name-servers 119.6.6.6, 114.114.114.114;
#请用您的ISP服务商的DNS地址替换。两个IP地址用逗号相连,注意逗号前无空格,逗号后面有一个空格,并以分号结束。然后在该配置文件的最后加上以下内容来配置dhcp服务:

subnet 169.254.219.0 netmask 255.255.255.0 {
range 169.254.219.66 169.254.219.99;
option domain-name-servers 119.6.6.6,172.16.16.16;
#注意上面两个DNS服务器IP地址间用英文逗号分隔且无空格
option subnet-mask 255.255.255.0;
option routers 169.254.219.6;
#注意与/etc/default/isc-dhcp-server文件中设置的对应网卡、interfaces中对应网卡的IP地址和网段相同
option broadcast-address 169.254.219.255;
default-lease-time 600;
max-lease-time 7200;
}

subnet 169.254.218.0 netmask 255.255.255.0 {
range 169.254.218.66 169.254.218.99;
option domain-name-servers 119.6.6.6,172.16.16.16;
#注意上面两个DNS服务器IP地址间用英文逗号分隔且无空格
option subnet-mask 255.255.255.0;
option routers 169.254.218.6;
#注意与/etc/default/isc-dhcp-server文件中设置的对应网卡、interfaces中对应网卡的IP地址和网段相同
option broadcast-address 169.254.218.255;
default-lease-time 600;
max-lease-time 7200;
}

如果要为某个网卡配置固定地址,加入以下参考内容:
host T420 {
#host后面跟主机名称
hardware ethernet 08:00:06:25:c0:a5;
fixed-address 169.254.219.66;
}

然后运行以下命令:
sudo service isc-dhcp-server start
#启动dhcp服务
sudo service isc-dhcp-server stop
#停止dhcp服务
sudo service isc-dhcp-server status
#查看dhcp服务状态,如果显示inactive或dead,请根据提示查找原因
#经实测,isc-dhcp-server不能为两块同网段的网卡提供dhcp服务,即两块网卡必须分配两个不同的网段

重启电脑后
sudo ps -e|grep dhcp
如果没有找到dhcpd进程,则isc-dhcp-server没有加入自启动,运行以下命令
sudo update-rc.d isc-dhcp-server defaults
#将isc-dhcp-server加入开机默认启动程序中
sudo systemctl is-enabled isc-dhcp-server.service
#查询isc-dhcp-server是否已加入开机默认启动程序中

sudo sysv-rc-conf
#查询isc-dhcp-server是否已加入开机默认启动程序中

以上配置完成后重启networking
sudo service networking stop
sudo service networking start
最好以上操作完成建议直接重启电脑
sudo reboot

10. 配置路由器

检查网络配置和网线连接是否与2.3节的要求一致

进入飞鱼星路由器内网配置(LAN口设置)页面
将内网IP设置为:169.254.219.1
子网掩码:255.255.255.0
进入飞鱼星路由器外网配置(WAN口设置)页面,删除所有外网配置,WAN接口设置为不使用
进入DHCP服务器设置页面,选择不启用DHCP服务
重启路由器后,即可正常通过麒麟18.04上网。

进入TPLINK路由器内网配置(LAN口设置)页面
将内网IP设置为:169.254.218.1
子网掩码:255.255.255.0
进入TPLINK路由器外网配置(WAN口设置)页面,删除所有外网配置,WAN接口设置为不使用
进入DHCP服务器设置页面,选择不启用DHCP服务
重启路由器后,即可正常通过麒麟18.04上网。

另外一种通过上网的方法如下,但本人不推荐,因为WAN口网速通常只有100M,且不方便飞鱼星和TPLINK两个网段下的电脑手机之间相互访问:
1)将enxfb与TPLINK路由器的WAN口相连
2)进入TPLINK路由器WAN口设置页面,将WAN口连接类型改为“动态IP”方式,其他“手动设置DNS服务器”和“单播方式获取IP”均不选择
3)进入TPLINK路由器内网配置(LAN口设置)页面
将内网IP设置为:192.168.2.1(可自定义,需与TPLINK路由器WAN口相连的网卡enxfb的IP地址处于不同的网段)
子网掩码:255.255.255.0
4)进入DHCP服务器设置页面
1)启用DHCP服务
2)起始IP地址:192.168.2.66(可自定义)
5)结束IP地址:192.168.2.166(可自定义)
6)默认网关:192.168.2.1
7)DNS服务器1:119.6.6.6 (需与ISP提供的DNS一致)
8)DNS服务器2:172.16.16.16 (需与ISP提供的DNS一致)

11. 配置跨网段访问主机

在本网络中配置如下:
服务器(enp0s1:169.254.219.6)==主机A(169.254.219.66)
服务器(enxfb:169.254.218.6)==主机B(169.254.218.66)
主机B不能跨网段访问服务器IP:169.254.219.6(该IP用于在内网其他电脑中samba及vsftp访问)及主机B:169.254.219.66
解决办法如下:
sudo nano /etc/sysctl.conf
增加下面1行或将原有的该行前的#号删除
net.ipv4.ip_forward=1

12. 通过DDNS实现域名和动态IP绑定

12.1 利用AliDDNS实现域名和动态IP绑定

首先,你得先到阿里云官网先申请一个免费域名,如www.hasil.top

apt-get install wget curl cron

下载AliDDNS脚本: wget -O /usr/sbin/AliDDNS-v2.0.sh https://bitbucket.org/ilemonrain/aliddns/downloads/AliDDNS-v2.0.sh

或到http://www.hasil.top:808/09-softwares下载AliDDNS-v2.0.sh,并将文件复制到/usr/sbin下。
sudo chmod +x /usr/sbin/AliDDNS-v2.0.sh
#为脚本文件加上可执行属性
sudo /usr/sbin/AliDDNS-v2.0.sh
#执行脚本,弹出启动菜单中选择AliDDNS.sh 配置并运行工具 (如果已有配置将会直接运行)
开始进入AliDDNS配置向导:
[Info] 请输入一级域名 (比如 example.com)
(此项必须填写,查看帮助请输入“h”): 填写你的域名如hasil.top
然后提示输入二级域名:
一二级域名填写举例,以www.hasil.top为例,hasil.top为一级域名, www为二级域名。
其中AccessKey ID 和 AccessKey Secret 在登陆阿里云后–>控制台–>点击用户图标可查看。推荐有动手能力的用户使用子用户AccessKey(访问控制台RAM) 分配的权限!这样最安全!使用子用户AccessKey,请分配 AliyunDNSReadOnlyAccess(只读访问云解析(DNS)的权限) 和 AliyunDNSFullAccess(管理云解析(DNS)的权限) 这两个权限!

各选项中如果你不懂或者不需要配置,请留空,直接回车!必要时自行百度
配置完成后自动运行如果出现:
[Success] DDNS记录更新成功,新的IP为:…
即为DDNS记录同步成功,稍后等待DNS解析生效,即可完成DDNS域名更换!
  
sudo nano /etc/crontab
在文件最后添加如下行:
*/11 * * * * root /usr/sbin/AliDDNS-v2.0.sh run >/dev/null 2>&1 &

最后在/etc/profile.d下创建一个脚本文件,实现在用户登录时自动进行更新公网IP到阿里云。该文件夹按字母顺序执行,请确保本脚本在pppoe脚本以后。
sudo nano /etc/profile.d/startaliddns.sh
内容如下:

startup AliDDNS

/usr/sbin/AliDDNS-v2.0.sh run >/dev/null 2>&1 &

或者将
/usr/sbin/AliDDNS-v2.0.sh run >/dev/null 2>&1 &
加入到/etc/rc.local文件中“exit 0”行的前一行

以上为单线ADSL的配置方法,双线ADSL配置如下
如果两个ADSL连接ppp0和ppp1都有公网IP(使用命令curl whatismyip.akamai.com查看本机的IP地址是否与ifconfig显示的ppp0和ppp1的IP地址一致,如果不一致就说明你的ISP没有给你提供公网IP),跳过下面的内容。

本人的个人云服务器从单线ADSL升为双线ADSL后,其中ppp0有公网IP,ppp1无公网IP,经curl -s whatismyip.akamai.com命令如果从ppp1口出去则查询到的IP实际上是一个内网IP,经常导致从外部无法正常访问服务器。

当已经配置好双线adsl路由表后,对/usr/sbin/AliDDNS-v2.0.sh文件有两种处理方法,来使其正常运行,一种如下:
sudo cp /usr/sbin/AliDDNS-v2.0.sh /usr/sbin/AliDDNS-v2.0.sh.bak
sudo nano /usr/sbin/AliDDNS-v2.0.sh
找到所有的curl -s whatismyip.akamai.com字符
替换为curl -s whatismyip.akamai.com --interface ppp0
即可。
如果重启电脑后AliDDNS-v2.0.sh还不能正常运行,请再参考以下另一种方法。

当已经配置好双线adsl路由表后,若AliDDNS-v2.0.sh还不能正常运行,只能换个思路,在已知ppp0有公网IP的情况下通过截取ifconfig命令显示的ppp0的inet地址来取得本机的实际公网IP,经实测对AliDDNS-v2.0.sh修改如下:
sudo cp /usr/sbin/AliDDNS-v2.0.sh /usr/sbin/AliDDNS-v2.0.sh.bak
sudo nano /usr/sbin/AliDDNS-v2.0.sh
找到:
function_AliDDNS_CheckConfig(){
将该函数下的原:

  AliDDNS_LocalIP=`sed '/^AliDDNS_LocalIP=/!d;s/.*=//' /etc/OneKeyAliDDNS/config.cfg | sed 's/\"//g'`

替换为:

if [ -e /run/ppp0.pid ]; thenAliDDNS_LocalIP=`ifconfig "ppp0" | awk -v head="inet " -v tail=" netmask" '{print substr($0, index($0,head)+length(head),index($0,tail)-index($0,head)-length(head))}' | sed s/[[:space:]]//g | sed /^$/d`
elseecho -e "${Msg_Error}电脑没有ppp0的连接,请检查网络连接后重新配置 !"exit 1
fi

找到:
function_AliDDNS_GetLocalIP(){
将该函数下的原:

  AliDDNS_LocalIP=`$AliDDNS_LocalIP 2>&1`

替换为:

   if [ -e /run/ppp0.pid ]; thenAliDDNS_LocalIP=`ifconfig "ppp0" | awk -v head="inet " -v tail=" netmask" '{print substr($0, index($0,head)+length(head),index($0,tail)-index($0,head)-length(head))}' | sed s/[[:space:]]//g | sed /^$/d`elseecho -e "${Msg_Error}未能获取本机IP!"echo -e "${Msg_Error}电脑没有ppp0的连接,请检查网络连接后重新配置 !"exit 1fi

即可实现通过截取ifconfig命令显示的ppp0的inet地址来取得本机的实际公网IP,并上传Aliyun服务器更新对应域名的IP。

sudo nano /etc/rc.local
将:
/usr/sbin/AliDDNS-v2.0.sh run >/dev/null 2>&1 &
加入到/etc/rc.local文件中“exit 0”行的前一行

最后
** sudo chmod 700 /etc/OneKeyAliDDNS/config.cfg
#将该文件属性改为700以保护阿里域名用户密码的安全性**

12.2 利用花生壳实现域名和动态IP绑定

如果你的ISP不能提供公网IP,那你只能到花生壳官网先申请一个域名和内网穿透花生壳服务,建议花点钱购买内网穿透花生壳服务。

在花生壳官网下载peanuthull客户端并解压,我用的是phddns_2.0.6_amd64.deb
或到http://www.hasil.top:808/09-softwares
下载后将将文件复制到/tmp
sudo dpkg -i phddns_2.0.6_amd64.deb
sudo phddns
这时提示:Enter server address(press ENTER use phddns60.oray.net):
直接回车
接着提示:
Enter your Oray account: (输入花生壳帐号)
Password: (输入花生壳帐号对应密码)
Network interface(s):
[ppp0] = [IP:101.204.31.73]
[br0] = [IP:192.168.3.10]
[lo] = [IP:127.0.0.1]
Choose one(default eth0):ppp0
Log to use(default /var/log/phddns.log):
/var/log/phddns.log
Save to configuration file (/etc/phlinux.conf)?(yes/no/other):yes
101.204.31.73
NIC bind success
defOnStatusChanged okConnecting
defOnStatusChanged okRedirecting
defOnStatusChanged okConnecting
defOnStatusChanged okDomainListed
defOnDomainRegistered jjtjXXXX.gicp.net
defOnDomainRegistered yangXXXXX.wicp.net
……
……
UserType: 0
看到上面这些就表示登录成功,这个时候可以按ctrl+c先退出程序

sudo chmod 700 /etc/phlinux.conf
#保护花生壳的用户和密码
以后台模式启动花生壳并检查运行情况
sudo phddns -c /etc/phlinux.conf -d
提示:
101.204.31.73
NIC bind success
phddns started as daemon!

sudo tail /var/log/phddns.log
查看phddns运行情况。

查看进程ID
sudo ps -A | grep phddns
19049 ? 00:00:00 phddns
让后台进程退出
sudo kill -9 19049

将花生壳加到系统启动时运行
sudo nano /etc/rc.local
在文件的末尾exit 0的前一行加上一行:
/usr/bin/phddns -c /etc/phlinux.conf -d

12.3 直接利用TPLINK路由器和飞鱼星路由器的动态域名功能绑定花生壳动态域名

注意:若使用TPLINK路由器和飞鱼星路由器自带的动态域名功能,则本文以上所有内容均不适用
经实测,TPLINK用一段时间后会掉线,飞鱼星要好点。
飞鱼星路由器界面:
高级选项–动态域名
选择一个WAN接口
点击启用动态DNS客户端,输入服务类型、服务提供方的用户名和密码

TPLINK路由器界面:
动态DNS
选择服务提供者,输入花生壳的用户名和密码,点击启用DDNS,过会或重启后即可见到域名信息。

13. 安装ftp服务

请见:http://www.hasil.top:808/06-网络配置、软路由、WIFI热点、SAMBA和FTP服务器搭建/在ubuntu下安装和配置ftp服务器.txt

14. 安装samba服务

请见:http://www.hasil.top:808/06-网络配置、软路由、WIFI热点、SAMBA和FTP服务器搭建/在ubuntu下安装和配置samba服务器.txt

15. 参考资料

排名不分先后,感谢各位作者提供的经验!

Ubuntu超级802.11N无线软路由
Ubuntu+ADSL拨号+花生壳实现域名动态IP绑定
Ubuntu下利用AP架设WIFI热点(含网卡支持查询)
把ubuntu配置成路由器+DHCP
将debian配置为软路由
在Ubuntu12.04上使用hostapd和dhcp3-server建Wi-Fi AP
How to Setup a Wireless Ubuntu Router
ubuntu常用软件包deb的安装与卸载
Linux下PPPoE断线自动重拨
AliDDNS的作者ilemonrain
linux网络路由管理之二(多ISP出口负载均衡)
linux 高级路由及流量控制总结
在Linux下配置多线路ADSL的方法

基于ubuntu18.04搭建双线adsl路由器和私有云服务器(samba、ftp和http)相关推荐

  1. 对基于ubuntu18.04搭建双线adsl路由器和私有云服务器(samba、ftp和http)一文的更正2

    在<基于ubuntu18.04搭建双线adsl路由器和私有云服务器(samba.ftp和http)>一文中对于adsl断线重拨后自动更新路由表的脚本,少了自动平衡双线adsl流量的命令,将 ...

  2. 对基于ubuntu18.04搭建双线adsl路由器和私有云服务器(samba、ftp和http)一文的更正

    在<基于ubuntu18.04搭建双线adsl路由器和私有云服务器(samba.ftp和http)>一文中有两处错误,更正如下: 1)"7b. 配置双线adsl路由表" ...

  3. 基于Ubuntu18.04下深度学习服务器搭建

    基于Ubuntu18.04下深度学习服务器搭建 目录: 基于Ubuntu18.04下深度学习服务器搭建 主要模块组成 Anaconda安装 CUDA安装 pytorch安装 CuDNN安装 其他常用指 ...

  4. ubuntu18.04搭建SLAM环境 转 高翔 十四讲匹配环境

    ubuntu18.04搭建SLAM环境_stjuliet的博客-CSDN博客_ubuntu安装slam

  5. Ubuntu18.04搭建Android源码编译环境

    一.前言 使用Ubuntu18.04搭建Android源码的编译,本文是参考Android系统源码编译文章撰写的. 二.步骤 1.下载Android源码.Ubuntu环境搭建.git安装请参考其他文章 ...

  6. Ubuntu18.04搭建FTP服务器

    Ubuntu18.04搭建FTP服务器 1.安装vsftpd sudo apt-get install vsftpd 2.启动 service vsftpd start 3.查看运行状态 servic ...

  7. ubuntu18.04搭建Mysql,C++连接Mysql数据库

    ubuntu18.04搭建Mysql,用C++去连接数据库 搭建Mysql环境 ubuntu18.04搭建Mysql链接 切记:虽然可以使用ubuntu自带的sudo命令进行安装,但是安装的版本不是最 ...

  8. ubuntu18.04搭建spark

    参考博文: https://blog.csdn.net/weixin_42001089/article/details/82346367 Hadoop 在安装和配置spark之前,先安装并配置好had ...

  9. 私有云服务器搭建及ssh连接

    私有云服务器搭建及ssh连接 一.私有云服务器搭建 1. 镜像选择 因为我这次搭建服务器就是为了项目部署,所以镜像我选择的是Ubuntu Server 18.04,大家可以去Ubuntu官网进行下载. ...

  10. 企业应该如何搭建私有云服务器数据中心?需要注意哪些问题

    近几年来云计算成为热门话题,随着企业业务增多也开始搭建私有云平台,那么企业如何建设私有云平台? 一.做好融合基础架构规划 企业对于私有云的投资并非一个全新的投资项目,可通过整合企业当前现有IT基础设施 ...

最新文章

  1. 音频编解码器以50%的功耗提供两倍的音频质量
  2. R语言rep函数重复向量或者列表元素实战
  3. ArcServer for Java 讲座
  4. BZOJ 4679/Hdu5331 Simple Problem LCT or 树链剖分
  5. MicroPython开发板:TPYBoard v102 播放音乐实例
  6. leetcode 69. x 的平方根 思考分析
  7. 每天定时打开某个网页_Python科普帖定时通知
  8. 如何使用Python 画笔
  9. 山东网通和电信的DNS
  10. 云流化是什么?对软件企业有什么好处?
  11. 跑步减肥的正确姿势与方法 不再担心女生跑步腿会变粗
  12. aardio - 利用bitLock快速读写图片颜色值
  13. 一年365天每天进步 1‰和每天退步 1‰最后的结果分别是多少
  14. win10关闭自带杀毒软件Windows Defender的两种方法
  15. 中科蓝讯 AB32VG1 RISC-V开发板模块评测任务大挑战
  16. 最近某网站泄露密码数据分析
  17. 20200110(已解决)powerdesigner 的一些操作
  18. Java将下划线大写方式命名的字符串转换为驼峰式
  19. 降压电荷泵原理详细介绍
  20. 关于appid 被锁定问题

热门文章

  1. 3G到5G,运营商的“失落十年”
  2. 【DZX修改】根据性别不同显示不同的默认头像
  3. “Bluetooth keeps stopping“
  4. StikyNotes便签软件
  5. 微信小程序图片懒加载插件
  6. 多元线性方程的python解法
  7. 华为S5700交换机开启Telnet和SSH服务
  8. xxm系统-DB中勒索病毒
  9. latch 深入理解(转载)
  10. 朱啸虎建议创业者忘记区块链,遭应书岭回讽:你老了