操bb国片四区三区,亚洲一片内射无码,91短视频福利导航,蜜桃臀成人免费在线视频观看

如何讓一臺內(nèi)網(wǎng)服務(wù)器連接公網(wǎng)?

2024-08-02 09:13:59 Jinyu

圖片如上圖,有這樣一種場景,我們經(jīng)常遇到,局域網(wǎng)內(nèi)有兩臺服務(wù)器,Server 1和Server 2,Server 1可以通通網(wǎng),Server 2只能通內(nèi)網(wǎng),無法直接訪問公網(wǎng)

現(xiàn)在想Server 2能訪問到公網(wǎng),怎么做?

通常的做法,是在Server 1服務(wù)器上開一個代理服務(wù),比如Squid、Nginx等,然后在Server 2服務(wù)器上在profile中配置proxy代理

這種方法的弊端是,太局限,大多是情況只能7層代理,而且還會涉及到https代理證書問題等

那有沒有更好的方法?

今天介紹一種簡單又好用的方法,結(jié)合vxlan和iptables-snat實現(xiàn)內(nèi)網(wǎng)服務(wù)器公網(wǎng)訪問

下面介紹下具體實現(xiàn)方法:

Server 2與Server 1之間配置vxlan隧道

Server 1配置

# Server 1作為NAT服務(wù)器,需要做一些NAT的網(wǎng)關(guān)改造
# rp_filter設(shè)置為0
for f in /proc/sys/net/ipv4/conf/*/rp_filter
do
    echo 0 > $f
done
  
# ip forward轉(zhuǎn)發(fā)開啟0
/sbin/sysctl -w net.ipv4.conf.all.forwarding=1
  
# 設(shè)置TCP超時參數(shù)
/sbin/sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=900
/sbin/sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
/sbin/sysctl -w net.netfilter.nf_conntrack_tcp_timeout_close_wait=30
/sbin/sysctl -w net.netfilter.nf_conntrack_tcp_timeout_fin_wait=60
/sbin/sysctl -w net.netfilter.nf_conntrack_tcp_timeout_syn_sent=60
/sbin/sysctl -w net.netfilter.nf_conntrack_tcp_timeout_syn_recv=30
  
# 連接跟蹤nf_conntrack_tcp_loose設(shè)置0,不跟蹤已經(jīng)完成握手的流,主要是連接跟蹤性能優(yōu)化項
# nf_conntrack_tcp_loose選項如果設(shè)置為0,對于未完成三次握手的流,內(nèi)核連接跟蹤模塊將不會為其創(chuàng)建conntrack結(jié)構(gòu)。反之,值為1的話,將為任意收到的tcp報文創(chuàng)建conntrack
/sbin/sysctl -w net.netfilter.nf_conntrack_tcp_loose=0
# 創(chuàng)建點(diǎn)對點(diǎn)vxlan隧道
# 方法:ip link add vxlan0 type vxlan id 1 remote {Server2} local {Server1} dstport ${vxlan封包的目的端口},linux目的端口號(VXLAN Port)默認(rèn)為8472,指定為0,使用默認(rèn)端口
ip link add vxlan0 type vxlan id 1 local 192.168.30.11 dsport 0
# 調(diào)整MTU
ifconfig vxlan0 mtu 1400
# 配置一個vxlan地址,最好單獨(dú)使用一個網(wǎng)段
ip addr add 192.168.1.1/24 dev vxlan0
# 啟動vxlan
ip link set vxlan0 up
# 可以查看vxlan0配置信息
ip addr show

以上配置完成后,最重要的一步,設(shè)置iptables snat轉(zhuǎn)換策略

iptables -t nat -I POSTROUTING ! -s 192.168.30.11 -j SNAT --to 192.168.30.11

這樣Server1服務(wù)器就被改造成一個NAT網(wǎng)關(guān),當(dāng)然Server 1本身的上網(wǎng)等是沒有任何問題的

接著配置Server 2

Server 2配置

# 刪除默認(rèn)路由,因為要配置Server 2路由走vxlan,走Server1作為網(wǎng)關(guān),所以要刪除原先的默認(rèn)路由
route del default
# 和Server 1一樣添加vxlan
ip link add vxlan0 type vxlan id 1 remote 192.168.30.11 local 192.168.30.12 dsport 8472
# 啟動vxlan0
ifconfig vxlan0 up
# 修改MTU和Server 1一致
ifconfig vxlan0 mtu 1400
# 添加路由
route add 192.168.1.1 dev vxlan0
route add default gw 192.168.1.1
# 啟用時間戳
sysctl -w net.ipv4.tcp_timestamps=0
# rp_filter設(shè)置為0
for f in /proc/sys/net/ipv4/conf/*/rp_filter
do
    echo 0 > $f
done

以上配置完成后,Server 2與Server 1之間通過vxlan實現(xiàn)通訊,Server 2默認(rèn)路由走vxlan dev,然后指向Server 1,Server 1配置了iptable snat轉(zhuǎn)發(fā),所以Server 2到公網(wǎng)的所有請求都被Server 1轉(zhuǎn)發(fā)出去,至此,Server 2實現(xiàn)公網(wǎng)訪問

中間有個MTU的修改,這里說下原因

在TCP封裝vxlan報文的時候,會增加50字節(jié),如下圖

圖片所以這里避免轉(zhuǎn)發(fā)過程中要分片,所以設(shè)置vxlan0的MTU為1400,這里可以通過抓包具體實測確定MTU大小

通過以上方法配置的內(nèi)網(wǎng)轉(zhuǎn)發(fā),比通過Nginx、Squid等方式配置的7層代理要方便很多,可以解決很多7層以下公網(wǎng)訪問的問題


我要咨詢