samba搭建到多網(wǎng)卡疊加
記錄debian做nas的smb3疊加翔忽,有些問(wèn)題并沒(méi)有完全弄清楚,如果以后有搞清楚,或者有錯(cuò)誤的地方早敬,再更正
samba的安裝
sudo aptitude install samba
samba配置
配置文件位于/etc/samba/smb.conf
它一共分成兩類(lèi)結(jié)點(diǎn),一類(lèi)是全局的節(jié)大脉,一類(lèi)是針對(duì)某些共享的節(jié)(例如打印機(jī)
搞监,共享文件夾
具體的設(shè)置)
全局節(jié)影響的是整個(gè)smb的設(shè)置,它包括一些smb的通用設(shè)置箱靴,例如綁定網(wǎng)卡腺逛,安全設(shè)置,日志等等衡怀,具體要參考smb.conf的manpage(man smb.conf
)
一個(gè)節(jié)(section)的格式
如下
[節(jié)的名稱(chēng)]
選項(xiàng) = 值
選項(xiàng) = 值1 值2 值3
;或者#后是注釋
#這是注釋
;這是注釋
把打印機(jī)相關(guān)節(jié)注釋掉
;[printers]
; comment = All Printers
; browseable = no
; path = /var/spool/samba
; printable = yes
; guest ok = no
; read only = yes
; create mask = 0700
有些選項(xiàng)是有默認(rèn)值的棍矛,沒(méi)有設(shè)置,則使用默認(rèn)值抛杨。以下列出部分設(shè)置
這里有兩張網(wǎng)卡
-
enp4s0
ip:192
.168
.1
.4
子網(wǎng)掩碼:255
.255
.255
.0
2.enp3s0
ip:192
.168
.1
.6
子網(wǎng)掩碼:255
.255
.255
.0
# 文件:/etc/samba/smb.conf
[global]
use sendfile = yes
fake oplocks = yes
#綁定網(wǎng)卡
;格式是
;interfaces = 網(wǎng)卡名A 網(wǎng)卡名B 網(wǎng)卡A的ip/掩碼 網(wǎng)卡B的ip/掩碼
interfaces = enp4s0 enp3s0 192.168.1.4/24 192.168.1.5/24
#最大并發(fā)
max mux = 10000
max open files =10000
#安全設(shè)置
invalid users = root ;禁止root用戶(hù)登錄
server multi channel support = yes ;啟用多通道够委,smb3的時(shí)候,可以通過(guò)多網(wǎng)卡通道疊加提升帶寬怖现。
有多張網(wǎng)卡的時(shí)候茁帽,可以使指定samba綁定某幾個(gè)網(wǎng)卡,具體網(wǎng)卡名稱(chēng)在/sys/class/net
目錄下可以看到
~$ ls /sys/class/net
docker0 enp3s0 enp4s0 lo veth22e5494
把某個(gè)文件夾共享
# 文件:/etc/samba/smb.conf
[dirname]
comment = 描述
path = 真實(shí)的物理路徑 #要共享文件的實(shí)際目錄
guest ok = no #禁止匿名訪問(wèn)
browseable = yes #是都可以瀏覽
create mask = 755 #創(chuàng)建文件時(shí)的默認(rèn)權(quán)限 rwx r-x r-x
read only = no #取消只讀
關(guān)于文件訪問(wèn)的權(quán)限問(wèn)題:
共享節(jié)并沒(méi)有直接控制具體到某個(gè)用戶(hù)的訪問(wèn)權(quán)限,但是文件或者文件夾的訪問(wèn)屈嗤,受到實(shí)際文件權(quán)限限制潘拨,因此用不同的本地用戶(hù)登錄,需要解決一些共享權(quán)限的問(wèn)題饶号,下面敘述完賬戶(hù)設(shè)置后铁追,再敘述權(quán)限部分
修改smb.conf配置文件后,需重載smbd服務(wù)使得新配置生效
sudo systemctl reload smbd
或者重啟服務(wù)sudo systemctl restart smbd
smb賬戶(hù)
smb賬戶(hù)的本地賬戶(hù)創(chuàng)建需要注意的地方是:smb用戶(hù)和本地用戶(hù)名稱(chēng)要保持一致茫船,使用smbpasswd創(chuàng)建用戶(hù)
sudo smbpasswd -a 用戶(hù)名
#例如個(gè)人用戶(hù)是xxoo琅束,則
sudo smbpasswd -a xxoo
smbpasswd
還有一些關(guān)于控制賬戶(hù)的選項(xiàng),具體看幫助算谈,有些選項(xiàng)沒(méi)有用過(guò)涩禀,也不清楚具體使用。
到這一步一般情況下都可以正常登陸訪問(wèn)了然眼,如果訪問(wèn)出現(xiàn)了問(wèn)題艾船,需要考慮權(quán)限問(wèn)題
1.smb的本地用戶(hù)名和linux本地用戶(hù)要一一對(duì)應(yīng)
2.訪問(wèn)的文件、文件夾,linux用戶(hù)需要有訪問(wèn)權(quán)限
多路疊加
SMB3后丽声,支持多路疊加礁蔗,如果查看現(xiàn)在是否使用的是smb3?(下圖xxoo是用戶(hù)名)
~$ sudo smbstatus
Samba version 4.9.5-Debian
PID Username Group Machine Protocol Version Encryption Signing
----------------------------------------------------------------------------------------------------------------------------------------
14186 xxoo xxoo 192.168.1.4 (ipv4:192.168.1.4:49723) SMB3_11 - partial(AES-128-CMAC)
11699 xxoo xxoo 192.168.1.4 (ipv4:192.168.1.4:49865) SMB3_11 - partial(AES-128-CMAC)
在 Protocol 列可以看到雁社,當(dāng)前連接的客戶(hù)端使用的協(xié)議版本是SMB3_11
smb3多路疊加需要至少4張網(wǎng)卡支持浴井,Nas 2張,電腦2張霉撵,網(wǎng)卡接上后磺浙,連接正常,右鍵左下角開(kāi)始
按鈕徒坡,選擇powershell(管理員)
PS C:\Windows\system32> Get-SmbMultichannelConnection
Server Name Selected Client IP Server IP Client Interface Index Server Interface Index Client RSS Capable Client RDMA Capable
----------- -------- --------- --------- ---------------------- ---------------------- ------------------ -------------------
192.168.1.4 True 192.168.1.7 192.168.1.4 17 4294967295 False False
192.168.1.4 True 192.168.1.8 192.168.1.5 11 2 False False
上圖smbd服務(wù)器的地址是192.168.1.4
和 192.168.1.5
電腦的網(wǎng)卡地址是192.168.1.7
和 192.168.1.8
圖中可以看出撕氧,連接關(guān)系是:
192.168.1.7
<---> 192.168.1.4
192.168.1.8
<---> 192.168.1.5
這樣說(shuō)明已經(jīng)成功啟用了多通道疊加,隨便找個(gè)大文件傳輸喇完,如果速度疊加伦泥,說(shuō)明配置完.....
成個(gè)P呀,當(dāng)然沒(méi)那么順利
我遇上了什么情況锦溪?
因?yàn)槲?張網(wǎng)卡都接在同一個(gè)交換機(jī)下不脯,由路由器分配固定的IP,每個(gè)網(wǎng)卡都可以?xún)蓛苫ピL刻诊,路徑一度混亂
1.上傳疊加了防楷,但是下載速度不變
2.下載速度疊加了,上傳速度不變
查看雙網(wǎng)卡则涯,均有 占用帶寬复局,但是,任務(wù)管理器中查看粟判,win10的雙網(wǎng)卡的都有都有發(fā)送或者接收亿昏,但是兩個(gè)網(wǎng)卡加起來(lái),并沒(méi)與突破千兆帶寬档礁。
也就是角钩,雖然電腦這邊的雙網(wǎng)卡的確分流了,但是nas那邊事秀,并沒(méi)有使用到另外一張網(wǎng)卡,很郁悶野舶,為什么出現(xiàn)這種情況易迹,
我該怎么做?
這里涉及到一個(gè)ARP的問(wèn)題平道,默認(rèn)情況下睹欲,linux會(huì)啟用以下參數(shù):
net.ipv4.conf.all.arp_filter = 0
net.ipv4.conf.all.arp_announce = 0
net.ipv4.conf.all.arp_ignore = 0
enp3s0 : 192.168.1.4
enp4s0 : 192.168.1.5
linux的并不是綁定網(wǎng)卡的,即出現(xiàn)這樣的一種情況: 192.168.1.4
, 192.168.1.5
均在一個(gè)傻瓜交換機(jī)下窘疮,二層他們是連在一起的袋哼,當(dāng)子網(wǎng)內(nèi)有個(gè)主機(jī)詢(xún)問(wèn),誰(shuí)是192.168.1.4
?闸衫,請(qǐng)告訴我你的MAC地址涛贯!
我們來(lái)思考下這些問(wèn)題:
arp請(qǐng)求的數(shù)據(jù)包從哪個(gè)網(wǎng)絡(luò)接口流入的?
arp響應(yīng)的MAC地址應(yīng)該是哪個(gè)蔚出?一定是enp3s0么弟翘?
由于arp請(qǐng)求是個(gè)廣播包,與之查詢(xún)IP匹配的主機(jī)會(huì)響應(yīng)該請(qǐng)求骄酗,不匹配的主機(jī)就沉默稀余。
但是nas上,有兩個(gè)網(wǎng)絡(luò)接口趋翻,它兩個(gè)接口都收到了arp查詢(xún)請(qǐng)求睛琳,它該怎么辦?
net.ipv4.conf.all.arp_filter
踏烙, net.ipv4.conf.all.arp_announce
师骗,net.ipv4.conf.all.arp_ignore
這3個(gè)參數(shù)在影響著不同的處理策略
net.ipv4.conf.all.arp_filter=0
的時(shí)候,他會(huì)響應(yīng)其他接口的IP宙帝,例如丧凤,從enp3s0進(jìn)來(lái)的查詢(xún)“192.168.1.4”,主機(jī)也會(huì)對(duì)該請(qǐng)求相應(yīng)步脓,但是相應(yīng)的是enp4s0的MAC地址愿待,而不是按綁定關(guān)系的enp3s0的mac地址。
那么靴患,別人誤以為enp4s0的ip地址就是192.168.1.4仍侥,他就往這里發(fā)了。
有趣的情況來(lái)了鸳君,當(dāng)192.168.1.5呢农渊?他也往這里發(fā)了!;蚣铡砸紊!
電腦那邊,arp查詢(xún)192.168.1.4囱挑、192.168.1.5的的mac地址醉顽,可能是相同的!平挑!
那么應(yīng)該設(shè)置net.ipv4.conf.all.arp_filter=1
游添,針對(duì)enp3s0系草,他只會(huì)響應(yīng)192.168.1.4的arp請(qǐng)求,與自己接口對(duì)應(yīng)ip無(wú)關(guān)的請(qǐng)求唆涝,它是忽略的找都。
再說(shuō)net.ipv4.conf.all.arp_announce
,如果出現(xiàn)這樣的一種情況:如果局域網(wǎng)內(nèi)有個(gè)主機(jī)廊酣,他的IP(192.168.3.2)與nas的IP(192.168.1.4)不在同一個(gè)網(wǎng)段能耻,這種ARP請(qǐng)求,應(yīng)不應(yīng)該響應(yīng)啰扛?
這里就涉及到檢查arp請(qǐng)求的源IP嚎京,應(yīng)該要設(shè)置成只響應(yīng)同一子網(wǎng)的ARP請(qǐng)求,當(dāng)然這里的設(shè)置隐解,和均衡負(fù)載無(wú)關(guān)的鞍帝。設(shè)置成1即可。
最后一個(gè)ARP相關(guān)的問(wèn)題煞茫,net.ipv4.conf.all.arp_ignore
帕涌,應(yīng)該回應(yīng)那個(gè)MAC地址,前面說(shuō)到续徽, IP地址并不是配置到網(wǎng)卡上的蚓曼,網(wǎng)卡只有mac地址,也就是二層的東西钦扭,而ARP相應(yīng)纫版,他需要給對(duì)方返回一個(gè)合適的MAC地址。
設(shè)置成1客情、2都行其弊,都會(huì)考慮ARP請(qǐng)求查詢(xún)的IP,與該請(qǐng)求流入的網(wǎng)卡上配置的IP是否一致膀斋,一致才會(huì)回復(fù)梭伐。2就加多了一個(gè)限制,ARP請(qǐng)求方的IP與查詢(xún)的IP需要是同一子網(wǎng)內(nèi)的仰担。
最終的設(shè)置:
net.ipv4.conf.all.arp_filter=1
net.ipv4.conf.all.arp_announce=1
net.ipv4.conf.all.arp_ignore=2
二層的東西處理完了糊识,我們還得處理下三層的,指導(dǎo)下流量從哪個(gè)網(wǎng)口流出摔蓝。
手動(dòng)建立主機(jī)路由
我的想法是赂苗,4個(gè)網(wǎng)口都接在同一個(gè)交換機(jī)下,讓雙網(wǎng)卡實(shí)現(xiàn)下面的路由關(guān)系贮尉,4個(gè)網(wǎng)卡都在同一個(gè)網(wǎng)段拌滋, 相互訪問(wèn)可能受到躍點(diǎn)值的影響,躍點(diǎn)值越低绘盟,網(wǎng)卡優(yōu)先級(jí)越高鸠真,我猜猜可能是他們的路由關(guān)系并沒(méi)有想象中那樣。
電腦 <------> nas
192.168.1.7 <---> 192.168.1.4
192.168.1.8 <---> 192.168.1.5
于是龄毡,我手動(dòng)建立了靜態(tài)的路由(我4個(gè)網(wǎng)卡都在路由器綁定了靜態(tài)ip吠卷,路由器每次都會(huì)給他們分配固定的ip,設(shè)置靜態(tài)IP也行)
首先在linux端沦零,網(wǎng)卡和ip對(duì)應(yīng)如下
enp3s0:192.168.1.4
enp4s0:192.168.1.5
由于ip在路由上做了綁定祭隔,我這里只需要dhcp讓他分配就行了
網(wǎng)卡的配置文件在/etc/network/interfaces
,添加以下配置:
使得網(wǎng)卡啟動(dòng)后路操,自動(dòng)添加一條主機(jī)路由到192.168.1.7
#文件:/etc/network/interfaces
#允許網(wǎng)卡啟動(dòng)疾渴,配置網(wǎng)卡使用dhcp
allow-auto enp3s0
iface enp3s0 inet dhcp
#up:當(dāng)啟動(dòng)網(wǎng)卡是,添加一條路由關(guān)系屯仗,讓訪問(wèn)192.168.1.7通過(guò)192.168.1.4的那個(gè)網(wǎng)卡
#down:當(dāng)網(wǎng)卡卸載時(shí)搞坝,刪除這條路由關(guān)系
up route add -host 192.168.1.7 dev enp3s0
down route del -host 192.168.1.7 dev enp3s0
同樣,讓另外一張網(wǎng)卡魁袜,添加一條主機(jī)路由到192.168.1.8
allow-auto enp4s0
iface enp3s0 inet dhcp
up route add -host 192.168.1.8 dev enp4s0
down route del -host 192.168.1.8 dev enp4s0
然后重啟網(wǎng)卡或重啟nas桩撮。
然后,在win10這邊峰弹,也建立兩條永久的主機(jī)路由店量,指導(dǎo)訪問(wèn)192.168.3.4
或者 192.168.1.5
到底使用哪個(gè)網(wǎng)卡
首先查看網(wǎng)卡接口列表和路由表,搜索cmd鞠呈,用管理員權(quán)限運(yùn)行
route print
得到類(lèi)似于以下信息
在網(wǎng)卡接口分段看到接口列表融师,第一列數(shù)字
17
,11
之類(lèi)的是網(wǎng)卡的接口編號(hào)蚁吝,緊接著是它的MAC地址旱爆,最后是名稱(chēng),這里
Intel(R) I211 Gigabit Network Connection : 192.168.1.7
Realtek PCIe GbE Family Controller : 192.168.1.8
添加兩條主機(jī)路由
# route add 目的主機(jī) mask 255.255.255.255 網(wǎng)關(guān)地址 metric 躍點(diǎn)值 if 網(wǎng)卡編號(hào)
route add 192.168.1.4 mask 255.255.255.255 192.168.1.7 metric 1 if 17
route add 192.168.1.5 mask 255.255.255.255 192.168.1.8 metric 1 if 11
因?yàn)槭侵鳈C(jī)路由灭将,不是網(wǎng)絡(luò)路由疼鸟,所以,mask的值是255.255.255.255
網(wǎng)關(guān)地址庙曙,網(wǎng)卡對(duì)應(yīng)的ip
躍點(diǎn)值空镜,保證這條路由是優(yōu)先級(jí)最高的
網(wǎng)卡編號(hào)可以通過(guò)route print
查詢(xún)到
兩邊都通過(guò)主機(jī)路由綁定后,斷開(kāi)硬盤(pán)映射捌朴,重啟吴攒,重新做映射,并且通過(guò)powershell查閱對(duì)應(yīng)關(guān)系正常(Get-SmbMultichannelConnection
),上下行砂蔽,都達(dá)到了預(yù)期洼怔。傳輸帶寬的確疊加。
PS C:\Windows\system32> Get-SmbMultichannelConnection
Server Name Selected Client IP Server IP Client Interface Index Server Interface Index Client RSS Capable Client RDMA Capable
----------- -------- --------- --------- ---------------------- ---------------------- ------------------ -------------------
192.168.1.4 True 192.168.1.7 192.168.1.4 17 4294967295 False False
192.168.1.4 True 192.168.1.8 192.168.1.5 11 2 False False
但是左驾,并沒(méi)有確定镣隶,到底是哪邊的路由關(guān)系可能導(dǎo)致下載或上傳出現(xiàn)的問(wèn)題极谊,干脆,兩端都指定了主機(jī)路由安岂。
使用glances可以查看系統(tǒng)狀態(tài)轻猖,例如網(wǎng)卡的實(shí)時(shí)速度∮蚰牵或者使用bmon查看網(wǎng)卡,安裝如下
sduo apt-get install bmon glances
使用如下
glances
bmon
對(duì)于使用了systemd的發(fā)行版咙边,可以使用systemd來(lái)配置network,翻譯文檔可以查看以下鏈接
http://www.jinbuguo.com/systemd/systemd.network.html#
配置的思路是次员,利用mac地址進(jìn)行匹配(Match)败许,不同mac地址的網(wǎng)卡設(shè)對(duì)應(yīng)的路由關(guān)系,一個(gè).network配置文件對(duì)應(yīng)一個(gè)網(wǎng)卡淑蔚,存放在/etc/systemd/network目錄下市殷,如:/etc/systemd/network/enp3s0.network
# filename : /etc/systemd/network/xxx.network
# 匹配MAC地址的節(jié)這個(gè)配置只針對(duì)特定的MAC地址的網(wǎng)卡生效
[Match]
MACAddress=xx:xx:xx:xx:xx:xx
# 設(shè)置MTU選項(xiàng)
[Link]
MTUBytes=1500
[Network]
Description=配置網(wǎng)絡(luò)啟用DHCP客戶(hù)端,并且刹衫,啟用轉(zhuǎn)發(fā)被丧,詳細(xì)配置看[DHCP小節(jié)]
DHCP=yes
IPForward=yes
# 可以存在多個(gè)route小節(jié),Route小節(jié)主要是設(shè)定路由關(guān)系绪妹,下面設(shè)置的是一個(gè)主機(jī)路由
# Gateway 為0.0.0.0意味著這是個(gè)直通路由甥桂,不經(jīng)過(guò)網(wǎng)關(guān)
# Destination只是一個(gè)通往192.168.1.2的主機(jī)路由,如果要通往一個(gè)網(wǎng)段邮旷,要寫(xiě)成192.168.1.1/24這種
# Metric設(shè)置它的躍點(diǎn)值黄选,躍點(diǎn)值越低,優(yōu)先級(jí)越高
# MTUBytes設(shè)置最大傳輸單元
# 有了這條路由婶肩,按照選路原則(子網(wǎng)掩碼最長(zhǎng)的優(yōu)先)办陷,主機(jī)路由的優(yōu)先級(jí)是最高的,其次才回到針對(duì)192.168.1.1/24網(wǎng)段的路由(子網(wǎng)掩碼是255.255.255.0)律歼,即使Metric值比它低民镜,主機(jī)路由還是優(yōu)先的
[Route]
Destination=192.168.1.2
Gateway=0.0.0.0
Metric=0
MTUBytes=1500
#DHCP小節(jié)只有在Network小節(jié)中開(kāi)啟DHCP=yes才有效
# SendHostname=yes 發(fā)送特定的主機(jī)名給DHCP server
# Hostname=XXOO-x 指定特定的主機(jī)名
# RouteMetric 指定DHCP 設(shè)定的路由的躍點(diǎn)值,多網(wǎng)卡同時(shí)上網(wǎng)的情況险毁,通過(guò)設(shè)置躍點(diǎn)值指定網(wǎng)卡優(yōu)先級(jí)
# 這個(gè)將影響DHCP成功分配IP后制圈,默認(rèn)路由的躍點(diǎn)值
[DHCP]
SendHostname=yes
Hostname=XXOO-x
RouteMetric=101
然后重新啟動(dòng)systemd-networkd服務(wù)
sudo systemctl restart systemd-networkd
根據(jù)網(wǎng)卡設(shè)置,網(wǎng)卡配置被加載后畔况,同時(shí)會(huì)添加主機(jī)路由鲸鹦。
查看是否載入了路由:
route -n
smb3多通道偶爾還是出現(xiàn)上述被限制到千兆的問(wèn)題,我嘗試了以下操作暫時(shí)算是恢復(fù)了跷跪,比較奇怪
在linux馋嗜,重啟網(wǎng)卡服務(wù)和samba服務(wù)
sudo systemctl restart systemd-networkd smbd
在windows重置了winsock,然后重啟windows
netsh winsock reset
檢查兩邊的路由表吵瞻,沒(méi)有異常葛菇,后續(xù)再測(cè)試甘磨,速度恢復(fù)了。
上面這個(gè)問(wèn)題就是因?yàn)榍懊嫠f(shuō)ARP的原因造成的眯停。
2020.1.16 emmm...太多線了宽档,終究還是入了10G網(wǎng)卡。
2021.9.4 原來(lái)ARP的鍋..