應用openvpn

来源:https://www.cnblogs.com/f-ck-need-u/archive/2018/03/17/8593429.html
-Advertisement-
Play Games

本文目錄:1.vpn概述 1.1 vpn應用場景 1.2 隧道協議 1.3 SSL VPN和IPSEC VPN2.openvpn搭建client-to-site的vpn 2.1 安裝lzo和openvpn 2.2 創建CA和SSL證書 2.3 配置服務端 2.4 配置客戶端 2.5 查看vpn的連接 ...


本文目錄:
1.vpn概述
 1.1 vpn應用場景
 1.2 隧道協議
 1.3 SSL VPN和IPSEC VPN
2.openvpn搭建client-to-site的vpn
 2.1 安裝lzo和openvpn
 2.2 創建CA和SSL證書
 2.3 配置服務端
 2.4 配置客戶端
 2.5 查看vpn的連接狀態
 2.6 讓客戶端和vpn所在內網通信
 2.7 使用NAT讓客戶端和VPN所在內網通信
3.使用密碼撥號以及帳號吊銷
4.Linux主機上配置openvpn客戶端

1.vpn概述

VPN(virtual Private network)即虛擬專用網路,是通過建立一條專用通道進行通信的技術,可以理解為通過建立一條獨有的隧道讓兩邊通信。

1.1 vpn應用場景

假設臺北總公司有一個上海分公司,兩個辦公地點都設置了防火牆,內部網路也都使用的私有地址。由於總公司老闆經常外出出差,他能直接正常的訪問到臺北總公司內網的伺服器嗎?不能。同理上海分公司也不能正常訪問到臺北總公司內網的伺服器。

使用VPN就是為瞭解決這樣問題的。在以前要實現這樣的需求,需要找運營商申請幀中繼的服務,幀中繼就像是找他們拉一條專有的網線,然後兩邊通過這條專有的線進行通信。但是幀中繼是不是萬能的,它有優點和缺點。優點是申請多少帶寬的服務通信時就一定有多少帶寬,不會受到公網的網路阻塞;缺點是很貴,且不方便,試想如果到外國各地出差,如何解決它的流動性以及距離的問題。

VPN就像是把整個網際網路虛擬成一個路由器,無論出差的老闆身處何處,都能通過這個“路由器”來訪問內網的機器。就像是隨身帶了一根無長度限制、無地理位置限制的網線,隨時連接到內網中。而且,現在網速不斷增速,加密技術也不斷進步,使用VPN已經能夠很好的實現上面的需求了。

從上面的描述中,可以總結出VPN的幾個用途。

  • (1)client-to-site,個人對企業,就像上面的老闆訪問企業內部伺服器。是客戶端對vpn伺服器的隧道傳輸。
  • (2)site-to-site,企業對企業,就像上面上海分公司訪問臺北總公司的內部伺服器。是兩邊vpn伺服器之間的隧道傳輸。

即如下圖中標註的兩種用途。

1.2 隧道協議

有三種隧道協議:PPTP、L2TP、IPSec。

L2TP是第2層隧道協議,是一種工業標準Internet隧道協議。L2TP和PPTP都使用PPP協議對數據進行封裝,然後添加獨特的包頭,之後在在網路上進行傳輸。PPTP只能在兩端點之間建立單一隧道,L2TP支持兩端之間使用多隧道,用戶可以針對不同的服務質量創建不同的隧道。L2TP可以提供隧道驗證,而PPTP不可以。當L2TP或PPTP結合IPSEC共同使用的時候,可以由IPSEC提供隧道驗證。

IPSEC(IP Security)是一套協議包而不是一個單獨的協議。IPSEC隧道模式是封裝、路由與解封的過程。隧道將原始數據包封裝在新的數據包內部,新的數據包可能會有新的定址和路由信息,從而使其能夠通過網路進行傳輸。封裝後的數據包到達目的地後,會解除封裝然後獲得其中的數據內容。

1.3 SSL VPN和IPSEC VPN

ssl vpn是使用SSL數字證書來實現數據加密的VPN。最典型的就是openvpn。它能用於client-to-site,也能用於site-to-site。由於openvpn是C/S架構的工具,所以要求使用vpn服務的客戶端安裝openvpn客戶端程式。

IPSEC VPN主要用於site-to-site,即公司對公司的這種場景,兩邊公司都佈置vpn伺服器,兩個vpn伺服器之間進行隧道傳輸。常見的ipsec vpn的開源軟體是openswan。

對於site-to-site的互聯:

  • (1)使用openvpn的實現是在兩邊都安裝openvpn服務和openvpn的客戶端,要和對端通信時使用本地的客戶端撥號過去;
  • (2)使用openswan的實現只需要兩邊安裝openswan服務就可以,兩邊的通信是服務與服務的通信。

2.openvpn搭建client-to-site的vpn

openvpn的所有數據通信都基於一個單一的埠(預設是1194),預設使用UDP協議,也可以使用且建議使用TCP協議。

openvpn的核心是虛擬網卡。安裝openvpn後會在主機上多出一個網卡,可以像其他的網卡一樣進行配置。這個虛擬網卡可以接收和發送數據。

openvpn提供了兩種虛擬網路介面:Tun和Tap。通過它們分別可以建立三層IP隧道和虛擬2層乙太網,即分別在虛擬介面上分別實現數據包(tun)格式的傳輸和數據幀(tap)格式的傳輸。

傳輸的數據可以通過壓縮演算法進行數據壓縮後傳輸。

openvpn2.0以後的版本都能實現一個進程管理多個併發的隧道。

openvpn的身份驗證方式支持預享密鑰、第三方證書、用戶名密碼三種方式。

以下圖為例,將防火牆當作vpnserver,其中eth0是對外的網卡,eth1是內網地址。

由於10.0.10.6處於內網目前無法和外網直接通信,可以通過防火牆的NAT或者將10.6的預設路由指向防火牆使其和外界通信。但此處使用VPN來實現和外界某些主機通信,所以不做任何NAT也不設置預設路由。

現在的環境下,vpn sever能ping通win主機,能ping通10.0.10.6,win不能ping通vpn server的內網地址,10.6也不能ping通win主機。

2.1 安裝lzo和openvpn

由於vpn很可能要在公網上傳輸數據,不壓縮的話傳輸的數據量就太大,導致傳輸速度較慢。所以建議安裝一種壓縮插件。可以使用lzo和lz4。

2.4版本的openvpn已經支持lz4壓縮演算法,這種壓縮演算法性能遠強於lzo,而且lzo已經停止更新了。以下是幾種壓縮演算法壓力測試的結果。

但是此處還是先使用lzo的演算法來演示示例。

tar xf lzo-2.09.tar.gz  
cd lzo-2.09
./configure
make && make install

安裝openvpn。

yum -y install openssl-devel pam-devel

wget https://openvpn.net/index.php/open-source/downloads.html
tar xf openvpn-2.4.0.tar.gz
cd openvpn-2.4.0
./configure --enable-lzo
make && make install

一定要使用./configure --help查看下安裝方法,因為不同版本的openvpn有點不同。預設情況下lzo是被禁用的,所以要啟用。

2.2 創建CA和SSL證書

(1).自建CA(為了方便,在服務端建立)

(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem

(2).為vpn服務端頒發證書(服務端持有)

為openvpn提供一個目錄/etc/openvpn,路徑隨意,因為在啟動openvpn時會使用--config選項指定配置文件路徑,以後密鑰、證書文件以及配置文件都放在此目錄下。當然這是非必須的,只是為了方便以及統一化。

mkdir -p /etc/openvpn/certs

由於VPN server端要使用ca的證書,所以複製ca證書到此目錄中,並重命名為ca.crt。

cp -a /etc/pki/CA/cacert.pem /etc/openvpn/certs/ca.crt

(3).vpn服務端需要生成證書申請,並使用ca為其頒發證書

(umask 077;openssl genrsa -out /etc/openvpn/certs/server.key 2048)
openssl req -new -key /etc/openvpn/certs/server.key -out /etc/openvpn/certs/server.csr
openssl ca -in /etc/openvpn/certs/server.csr -out /etc/openvpn/certs/server.crt -days 365

(4).為客戶端頒發證書(客戶端持有)

(umask 077;openssl genrsa -out /etc/openvpn/certs/boss.key 2048)
openssl req -new -key /etc/openvpn/certs/boss.key -out /etc/openvpn/certs/boss.csr
openssl ca -in /etc/openvpn/certs/boss.csr -out /etc/openvpn/certs/boss.crt -days 365

(5).生成密鑰交換協議文件(服務端持有)

openssl dhparam -out /etc/openvpn/certs/dh2048.pem 2048

2.3 配置服務端

(1).為vpn提供配置文件

openvpn的樣例配置文件在openvpn解壓目錄下的sample目錄下的sample-config-files目錄下。

cd ~/openvpn-2.4.0/sample/sample-config-files/
cp -a server.conf client.conf /etc/openvpn/

配置文件參數說明:

  • local 192.168.100.5:表示openvpn服務端的監聽地址
  • port 1194:監聽的埠,預設是1194
  • proto tcp:使用的協議,有udp和tcp。建議選擇tcp
  • dev tun:使用三層路由IP隧道(tun)還是二層乙太網隧道(tap)。一般都使用tun
  • ca ca.crt
  • cert server.crt
  • key server.key
  • dh dh2048.pem:ca證書、服務端證書、服務端密鑰和密鑰交換文件。如果它們和server.conf在同一個目錄下則可以不寫絕對路徑,否則需要寫絕對路徑調用
  • server 10.8.0.0 255.255.255.0:vpn服務端為自己和客戶端分配IP的地址池。服務端自己獲取網段的第一個地址(此處為10.8.0.1),後為客戶端分配其他的可用地址。以後客戶端就可以和10.8.0.1進行通信。註意:該網段地址池不要和已有網段衝突或重覆。其實一般來說是不用改的。除非當前內網使用了10.8.0.0/24的網段。
  • ifconfig-pool-persist ipp.txt:使用一個文件記錄已分配虛擬IP的客戶端和虛擬IP的對應關係,以後openvpn重啟時,將可以按照此文件繼續為對應的客戶端分配此前相同的IP。也就是自動續借IP的意思。
  • server-bridge XXXXXX:使用tap模式的時候考慮此選項。
  • push "route 10.0.10.0 255.255.255.0":vpn服務端向客戶端推送一條客戶端到vpn內網網段的路由配置,以便讓客戶端能夠找到內網。多條路由就寫多個Push指令
  • client-to-client:讓vpn客戶端之間可以互相看見對方,即能互相通信。預設情況客戶端只能看到服務端一個人
  • duplicate-cn:允許多個客戶端使用同一個VPN帳號連接服務端
  • keepalive 10 120:每10秒ping一次,120秒後沒收到ping就說明對方掛了
  • tls-auth ta.key 0:加強認證方式,防攻擊。如果配置文件中啟用此項(預設是啟用的),需要執行openvpn --genkey --secret ta.key,並把ta.key放到/etc/openvpn目錄,服務端第二個參數為0。同時客戶端也要有此文件,且client.conf中此指令的第二個參數需要為1。
  • compress lz4-v2
  • push "compress lz4-v2":openvpn 2.4版本的vpn才能設置此選項。表示服務端啟用lz4的壓縮功能,傳輸數據給客戶端時會壓縮數據包,Push後在客戶端也配置啟用lz4的壓縮功能,向服務端發數據時也會壓縮。如果是2.4版本以下的老版本,則使用用comp-lzo指令
  • comp-lzo:啟用lzo數據壓縮格式。此指令用於低於2.4版本的老版本。且如果服務端配置了該指令,客戶端也必須要配置
  • max-clients 100:併發客戶端的連接數
  • persist-key
  • persist-tun:通過ping得知超時時,當重啟vpn後將使用同一個密鑰文件以及保持tun連接狀態
  • status openvpn-status.log:在文件中輸出當前的連接信息,每分鐘截斷並重寫一次該文件
  • log openvpn.log
    log-append openvpn.log:預設vpn的日誌會記錄到rsyslog中,使用這兩個選項可以改變。log指令表示每次啟動vpn時覆蓋式記錄到指定日誌文件中,log-append則表示每次啟動vpn時追加式的記錄到指定日誌中。但兩者只能選其一,或者不選時記錄到rsyslog中
  • verb 3:日誌記錄的詳細級別。

以下是完整的配置文件的內容。

cat /etc/openvpn/server.conf
local 192.168.100.5
port 1194
proto tcp
dev tun
ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/server.crt
key /etc/openvpn/certs/server.key
dh /etc/openvpn/certs/dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 10.0.10.0 255.255.255.0"
client-to-client
keepalive 10 120
tls-auth ta.key 0
comp-lzo
persist-key
persist-tun
status /var/log/openvpn-status.log
log  /var/log/openvpn.log
verb 3

由於使用了tls-auth功能,所以要生成ta.key。(客戶端和服務端都持有)

openvpn --genkey --secret /etc/openvpn/ta.key

(2).開啟服務端內核轉發功能

因為數據包要在vpn內部交換網卡進出,所以要開啟轉發功能。

echo 1 >/proc/sys/net/ipv4/ip_forward
sed -i "s/ip_forward.*$/ip_forward = 1/" /etc/sysctl.conf

(3).啟動openvpn

[root@node1 certs]# openvpn --config /etc/openvpn/server.conf &
[1] 32673
[root@node1 certs]# netstat -tnlp | grep 1194
tcp        0      0 192.168.100.5:1194     0.0.0.0:*    LISTEN    32673/openvpn

將其放入到rc.local中讓它下次開機自啟動。

echo "`which openvpn` --config /etc/openvpn/server.conf &" >>/etc/rc.d/rc.local

2.4 配置客戶端

windows版客戶端下載地址:https://openvpn.net/index.php/open-source/downloads.html

安裝的時候有一個是否信任的選項,選擇信任。假設安裝路徑為e:/openvpn目錄下。安裝完成後,從"開始菜單"那裡打開客戶端。

點開它,可能會提示缺少配置文件,暫時不用管。這時在win的通知區域會出現一個小圖標。

要真正能夠連接到服務端,需要提供客戶端配置文件、ca證書、客戶端證書、客戶端密鑰。如果在服務端配置文件中啟用了tls-auth認證防攻擊,則還需要提供ta.key文件

sz -y /etc/openvpn/{client.conf,ta.key,certs/boss.key,certs/boss.crt,certs/ca.crt}

將這些文件放到安裝目錄的config目錄下,可以為它們建立一個單獨的目錄,如boss。

修改配置文件,客戶端的配置文件使用如下的配置。

egrep -v "^$|^;|^#" client.conf
client
dev tun
proto tcp
remote 192.168.100.5 1194 
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert boss.crt
key boss.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
verb 3

其中只修改了以下的4項:

proto tcp
remote 192.168.100.5 1194  # vpn server的監聽地址和埠
cert boss.crt
key boss.key

並刪除了remote-cert-tls server項,此項是為了防止黑客攻擊的。所以完整的客戶端配置文件為:

client
dev tun
proto tcp
remote 192.168.100.5 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
tls-auth ta.key 1
cert boss.crt
key boss.key
cipher AES-256-CBC
verb 3

然後將配置文件重命名為".ovpn"尾碼,如改為boss.ovpn。然後在通知區域vpn的小圖標上右鍵選擇connect。

連接成功的話會出現如下圖分配地址的情形。如果始終連接不上,查看下vpn server是不是開啟了防火牆,如果是,就暫時關閉它。

儘管成功了,但是還是要檢驗下是否能夠ping通vpn服務端的虛擬地址10.8.0.1。

2.5 查看vpn的連接狀態

在status日誌中記錄了連接狀態信息。

[root@xuexi openvpn]# cat /var/log/openvpn-status.log 
OpenVPN CLIENT LIST
Updated,Mon Feb 27 18:44:38 2017
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
boss.longshuai.com,192.168.100.1:4554,14902,7872,Mon Feb 27 18:28:04 2017
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
10.8.0.6,boss.longshuai.com,192.168.100.1:4554,Mon Feb 27 18:43:36 2017
GLOBAL STATS
Max bcast/mcast queue length,0
END

2.6 讓客戶端和vpn所在內網通信

雖然上面已經能夠ping通vpn服務端了,但是並不代表能Ping通vpn伺服器所在的內網機器。繼續看下麵的圖。

由於客戶端已經使用10.8.0.6這個地址,在此客戶端上有一條到10.0.10.0網段的路由(在配置文件中push指令指定的),還有到10.8.0.0網段的路由,這幾條路由都指明瞭到這幾個網段都的下一跳都是交給10.8.0.5,這是VPN伺服器生成的網關地址。 所以,客戶端要Ping通10.0.10.0/24網段,那麼數據包就會先交到10.8.0.1這個tun0上,然後交到10.0.10.0/24這個網段的主機上,但是回應的時候數據包卻回不來,除非在私有網路的機器上配置了到10.8.0.0網段的路由,否則它不知道10.8.0.6的ping包應該交給誰。

所以私網內的主機要能與10.8.0.6通信,方法一是加一條到10.8.0.0網段的路由,甚至針對此客戶端主機來添加主機路由,它們的下一跳要交給vpn server的內網地址。

route add -host 10.8.0.6 gw 10.0.10.5
# 或者
route add -net 10.8.0.0/24 gw 10.0.10.5

以下是route -n的結果。

這時候vpn客戶端就能和私網內的主機通信了,但要註意,此時私網內主機不能和客戶端通信。

顯然,這樣的方法並不合適。這裡說明這種方法是為瞭解釋雙方通信過程中的本質。

2.7 使用NAT讓客戶端和VPN所在內網通信

為了讓vpn服務端私網內的機器可以把數據包交回給vpn伺服器,可以在vpn伺服器上使用網路地址轉換(NAT)功能,讓源地址為10.8.0.0網段的機器發過來的數據包的源地址全部改變為自己的內網IP地址,即10.0.10.5,這樣私網內的機器回應數據包時就會回應給10.0.10.5,然後vpn伺服器就可以將數據包還給vpn客戶端,實現通信的目的。

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth1 -j SNAT --to-source 10.0.10.5

到此為止,配置site-to-client的vpn就配置完成了。

3.使用密碼撥號以及帳號吊銷

(1).使用密碼撥號

要讓客戶端使用密碼才能撥號,需要做的是在生成客戶端證書申請文件(csr)的時候使用一個密碼。

openssl req -newkey rsa:2048 -keyout shuai.key -out shuai.csr

openssl ca -in shuai.csr -out shuai.crt -days 365

然後再將ca.crt、ta.key、shuai.crt、shuai.key、client.conf傳到客戶端,重覆前面部署客戶端的步驟。最後在openvpn的圖標處右鍵會有兩個撥號選擇。

(2).吊銷帳號

吊銷撥號的帳號的本質是吊銷客戶端證書。

吊銷證書的命令是:

openssl ca -revoke crt_file

生成吊銷列表的命令是:

openssl ca -gencrl -out crl_file

假設要吊銷shuai客戶端的證書。

openssl ca -revoke /etc/openvpn/certs/shuai.crt

然後生成吊銷列表:

openssl ca -gencrl -out /etc/openvpn/certs/shuai.crl

如果使用的是openssl的預設配置文件,則在生成吊銷列表的時候可能會報錯提示找不到crlnumber文件。可以創建此文件,並向其中寫入一個序列號,然後再去生成吊銷列表。

echo "01" >/etc/pki/CA/crlnumber

生成吊銷列表後,只要服務端的配置文件,加上crl-verify指令然後重啟openvpn服務就可以吊銷了。如果要吊銷多個帳號,則寫多個crl-verify即可。

vim server.conf 
local 192.168.100.5
port 1194
proto tcp
dev tun
ca /etc/openvpn/certs/ca.crt
cert  /etc/openvpn/certs/server.crt
key  /etc/openvpn/certs/server.key  # This file should be kept secret
dh  /etc/openvpn/certs/dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 10.0.10.0 255.255.255.0"
;duplicate-cn
keepalive 10 120
tls-auth ta.key 0
;compress lz4-v2
;push "compress lz4-v2"
comp-lzo
;max-clients 100
persist-key
persist-tun
status openvpn-status.log
log         openvpn.log
verb 3
crl-verify /etc/openvpn/certs/shuai.crl

再重啟openvpn。

pkill openvpn
openvpn --config /etc/openvpn/server.conf &

這時客戶端撥號就會如下圖,無限重連狀態。

4.Linux主機上配置openvpn客戶端

要在Linux主機上配置openvpn的客戶端,其實也很簡單,安裝完後把客戶端需要持有的文件拷貝過去然後啟動即可。

以下是環境需求,以上海分公司的防火牆暫時當作openvpn的客戶端,IP地址是192.168.100.151,確保它能和vpn server的eth0通信。

安裝過程和安裝服務端vpn過程相同,此處給出簡易步驟。

yum -y install openssl-devel pam-devel lzo* lz4*
tar xf openvpn-2.4.0.tar.gz
cd openvpn-2.4.0
./configure --enable-lz4 --enable-lzo
make && make install
mkdir -p /etc/openvpn/certs

再提供配置文件和相關證書、密鑰等。

scp -p root@192.168.100.5:/etc/openvpn/ta.key /etc/openvpn/
scp -p root@192.168.100.5:/etc/openvpn/certs/{boss.*,ca.crt} /etc/openvpn/certs/
cat >/etc/openvpn/boss.conf<<eof
client
dev tun
proto tcp
remote 192.168.100.5 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca    /etc/openvpn/certs/ca.crt
cert   /etc/openvpn/certs/boss.crt
key   /etc/openvpn/certs/boss.key
tls-auth /etc/openvpn/ta.key 1
cipher AES-256-CBC
comp-lzo
verb 3
eof

啟動vpn客戶端。會有些消息輸出在屏幕,多按幾次enter鍵就可以回到bash提示符下。

openvpn --config /etc/openvpn/boss.conf &

查看網卡信息是否有tun網卡。

ifconfig tun0
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.8.0.6  P-t-P:10.8.0.5  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:2 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:168 (168.0 b)  TX bytes:168 (168.0 b)

測試是否能ping通vpn server的內網機器10.0.10.6。

ping 10.0.10.6
PING 10.0.10.6 (10.0.10.6) 56(84) bytes of data.
64 bytes from 10.0.10.6: icmp_seq=1 ttl=63 time=3.07 ms
64 bytes from 10.0.10.6: icmp_seq=2 ttl=63 time=2.21 ms
64 bytes from 10.0.10.6: icmp_seq=3 ttl=63 time=2.19 ms

 

回到Linux系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7048359.html
回到網站架構系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7576137.html
回到資料庫系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7586194.html
轉載請註明出處:http://www.cnblogs.com/f-ck-need-u/p/8593429.html

註:若您覺得這篇文章還不錯請點擊右下角推薦,您的支持能激發作者更大的寫作熱情,非常感謝!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 資料參考來源 : 我姓區不姓區 有關於WIF的介紹以及環境配置在此不多說,可以去網上搜索,或者點擊上方鏈接前往查看,以下所述都基於WIF配置完成的條件上; 以下很多東西都是從 我姓區不姓區 的博客直接copy過來的,我另外加的就是我跟著他的博客一路中所踩的坑以及我自己的理解; 開始單點登錄踩坑之旅: ...
  • 恢復內容開始 .net 項目開發管理中我們經常使用Nuget管理我們的類庫。由於某些原因 nuget v3的鏡像源https://api.nuget.org/v3/index.json 經常連接不上。 博客園提供了鏡像源 https://nuget.cnblogs.com/v3/index.json ...
  • 一門語言如果是另一個語言的超集的話,那麼這麼語言就要向後者相容,會變得臃腫,在某些方面的顯得過於複雜,如c++ 2.引用是可以獨立的存在的,當給一個引用進行初始化的時候,就是給這個引用添加了關聯 如 string a;和string a="as" 3.常量的使用通常都是放在程式的內部,但也可放在非r ...
  • 如上面的代碼,在方法前面添加 [Obsolete] 特性即可 2018.3.16 14:33 補充 使用這個重載形式,後面的布爾值表示是否在客戶調用該方法的時候報錯。這樣可以保證不會有人會誤用該方法 ...
  • 本文記錄了給字元串賦予字面值時,為便於操作與閱讀而進行的常用操作,如轉義序列,C#6的新功能‘字元串插入’以及一字不變的指定字元串等。 ...
  • .NET Core 是一個通用開發平臺,由 Microsoft 和 GitHub 上的 .NET 社區共同維護。 它是跨平臺的,支持 Windows、macOS 和 Linux,並且可用於設備、雲和嵌入式/IoT 方案。 本教程學習如何創建基於ASP.NET Core Razor頁面的Web應用程式... ...
  • 寫在前面 「守護進程」是 Linux 的一種長期運行的後臺服務進程,也有人稱它為「精靈進程」。我們常見的 httpd、named、sshd 等服務都是以守護進程 Daemon 方式運行的,通常服務名稱以字母d結尾,也就是 Daemon 第一個字母。與普通進程相比它大概有如下特點: 無需控制終端(不需 ...
  • What is FFmpeg? FFmpeg是一套可以用來記錄、轉換數字音頻、視頻,並能將其轉化為流的開源電腦程式。它提供了錄製、轉換以及流化音視頻的完整解決方案。 What is x264? H.264是ITU(國際通信聯盟)和MPEG(運動圖像專家組)聯合制定的視頻編碼標準。而x264是一個開... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...