久久久久无码精品,亚洲国产精品国语在线,国产成人精品热玖玖玖,国产福利一区二区在线观看

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

2024-11-08 15:11:23 Jinyu

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

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

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

這種方法的弊端是,太局限,大多是情況只能7層代理,而且還會(huì)涉及到https代理證書(shū)問(wèn)題等

那有沒(méi)有更好的方法?

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

下面介紹下具體實(shí)現(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ā)開(kāi)啟0
/sbin/sysctl -w net.ipv4.conf.all.forwarding=1
  
# 設(shè)置TCP超時(shí)參數(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)化項(xiàng)
# nf_conntrack_tcp_loose選項(xiàng)如果設(shè)置為0,對(duì)于未完成三次握手的流,內(nèi)核連接跟蹤模塊將不會(huì)為其創(chuàng)建conntrack結(jié)構(gòu)。反之,值為1的話,將為任意收到的tcp報(bào)文創(chuàng)建conntrack
/sbin/sysctl -w net.netfilter.nf_conntrack_tcp_loose=0
# 創(chuàng)建點(diǎn)對(duì)點(diǎn)vxlan隧道
# 方法:ip link add vxlan0 type vxlan id 1 remote {Server2} local {Server1} dstport ${vxlan封包的目的端口},linux目的端口號(hào)(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
# 配置一個(gè)vxlan地址,最好單獨(dú)使用一個(gè)網(wǎng)段
ip addr add 192.168.1.1/24 dev vxlan0
# 啟動(dòng)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ù)器就被改造成一個(gè)NAT網(wǎng)關(guān),當(dāng)然Server 1本身的上網(wǎng)等是沒(méi)有任何問(wèn)題的

接著配置Server 2

Server 2配置

# 刪除默認(rèn)路由,因?yàn)橐渲肧erver 2路由走vxlan,走Server1作為網(wǎng)關(guān),所以要?jiǎng)h除原先的默認(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
# 啟動(dòng)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
# 啟用時(shí)間戳
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之間通過(guò)vxlan實(shí)現(xiàn)通訊,Server 2默認(rèn)路由走vxlan dev,然后指向Server 1,Server 1配置了iptable snat轉(zhuǎn)發(fā),所以Server 2到公網(wǎng)的所有請(qǐng)求都被Server 1轉(zhuǎn)發(fā)出去,至此,Server 2實(shí)現(xiàn)公網(wǎng)訪問(wèn)

中間有個(gè)MTU的修改,這里說(shuō)下原因

在TCP封裝vxlan報(bào)文的時(shí)候,會(huì)增加50字節(jié),如下圖

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

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


我要咨詢
阳谷县| 开原市| 海丰县| 榆社县| 博客| 韶关市| 宁波市| 集贤县| 太原市| 卢氏县| 巴里| 苗栗县| 汪清县| 吉林市| 呈贡县| 石柱| 云龙县| 沐川县| 丰镇市| 桐梓县| 石首市| 大竹县| 平度市| 大方县| 三台县| 龙海市| 福泉市| 泰州市| 涟水县| 安徽省| 贞丰县| 福贡县| 梁山县| 社旗县| 隆子县| 通许县| 会昌县| 光山县| 依兰县| 安溪县| 桃园县|