97色精品视频在线观看免费,日韩欧美亚洲每日更新网,国产精品色婷婷99久久精品,99e热久久免费精品首页

如何讓一臺內網服務器連接公網?

2024-11-08 15:11:23 Jinyu

圖片如上圖,有這樣一種場景,我們經常遇到,局域網內有兩臺服務器,Server 1和Server 2,Server 1可以通通網,Server 2只能通內網,無法直接訪問公網

現在想Server 2能訪問到公網,怎么做?

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

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

那有沒有更好的方法?

今天介紹一種簡單又好用的方法,結合vxlan和iptables-snat實現內網服務器公網訪問

下面介紹下具體實現方法:

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

Server 1配置

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

以上配置完成后,最重要的一步,設置iptables snat轉換策略

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

這樣Server1服務器就被改造成一個NAT網關,當然Server 1本身的上網等是沒有任何問題的

接著配置Server 2

Server 2配置

# 刪除默認路由,因為要配置Server 2路由走vxlan,走Server1作為網關,所以要刪除原先的默認路由
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設置為0
for f in /proc/sys/net/ipv4/conf/*/rp_filter
do
    echo 0 > $f
done

以上配置完成后,Server 2與Server 1之間通過vxlan實現通訊,Server 2默認路由走vxlan dev,然后指向Server 1,Server 1配置了iptable snat轉發,所以Server 2到公網的所有請求都被Server 1轉發出去,至此,Server 2實現公網訪問

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

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

圖片所以這里避免轉發過程中要分片,所以設置vxlan0的MTU為1400,這里可以通過抓包具體實測確定MTU大小

通過以上方法配置的內網轉發,比通過Nginx、Squid等方式配置的7層代理要方便很多,可以解決很多7層以下公網訪問的問題


我要咨詢
主站蜘蛛池模板: 绥棱县| 射洪县| 蕲春县| 新丰县| 灌南县| 盘锦市| 新竹市| 延庆县| 宾阳县| 淮安市| 长子县| 呼图壁县| 汕尾市| 新昌县| 喀什市| 隆子县| 博兴县| 蒲城县| 莲花县| 邻水| 昌图县| 普宁市| 深水埗区| 盐边县| 军事| 漳州市| 潮州市| 吴旗县| 乳源| 鹤壁市| 扶绥县| 仁怀市| 积石山| 奈曼旗| 辰溪县| 临桂县| 汕尾市| 惠水县| 日土县| 绿春县| 黄龙县|