欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何通過iptables將http請求從A服務器轉(zhuǎn)發(fā)到B服務器

 更新時間:2023年08月17日 15:02:03   作者:綠豆淀粉好勾芡兒  
這篇文章主要介紹了如何通過iptables將http請求從A服務器轉(zhuǎn)發(fā)到B服務器,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

1、準備服務器、終端

使用docker的容器來模擬所需的服務器、終端。dockerfile如下:

FROM centos:centos7 as iptables-test
RUN yum install -y iptables-services && yum install -y tcpdump

docker-compose.yml如下:

version: "2.7"
services:
  work0:
    build: .
    hostname: work0
    container_name: work0
    privileged: true
    tty: true
    networks:
      default:
        ipv4_address: 172.24.25.15
  work1:
    build: .
    hostname: work1
    container_name: work1
    privileged: true
    tty: true
    networks:
      default:
        ipv4_address: 172.24.25.16
  work2:
    build: .
    hostname: work2
    container_name: work2
    privileged: true
    tty: true
    networks:
      default:
        ipv4_address: 172.24.25.17
networks:
  default:
    external:
      name: network-public

網(wǎng)絡的設置參考如下(也可以按照自己已有的網(wǎng)絡設置):

docker network create --driver bridge --subnet 172.24.25.0/24 --gateway 172.24.25.1  network-public

針對docker-compose.yml中三個容器的解釋:

  • work0充當終端
  • work1充當服務器A
  • work2充當服務器B

2、準備一個http服務

package main
import (
	"fmt"
	"net/http"
	"os"
	"os/signal"
	"time"
)
func main() {
	mux := http.NewServeMux()
	mux.HandleFunc("/hello", HelloWorld)
	server := &http.Server{
		Addr:         ":22345",
		WriteTimeout: time.Second * 10,
		Handler:      mux,
	}
	err := server.ListenAndServe()
	if err != nil {
		if err == http.ErrServerClosed {
			fmt.Println("Server closed under request")
		} else {
			fmt.Println("Server closed unexpected", err)
		}
	}
	// 平滑退出
	quit := make(chan os.Signal, 1)
	signal.Notify(quit, os.Interrupt)
	go func() {
		<-quit // 接收到退出信號
		if err = server.Close(); err != nil {
			fmt.Println("close service:", err)
		}
	}()
}
func HelloWorld(w http.ResponseWriter, r *http.Request) {
	t := time.Now().Format("2006-01-02 15:04:05")
	s := fmt.Sprintf("當前時間: %s\n", t)
	w.Write([]byte(s))
}

編譯后上傳到服務器B,即work2容器的 /tmp 目錄。假設編譯后的包名為: http-service 。

3、設置服務器的iptables

3.1、 首先,確保A服務器上啟用了IP轉(zhuǎn)發(fā)功能。可以通過運行以下命令來檢查:

sysctl net.ipv4.ip_forward

如果返回值為1,則表示IP轉(zhuǎn)發(fā)已啟用。如果返回值為0,則需要將其啟用。可以通過編輯 /etc/sysctl.conf 文件并將 net.ipv4.ip_forward 設置為1來永久啟用IP轉(zhuǎn)發(fā)。

3.2、 在A服務器上設置iptables規(guī)則來將HTTP請求轉(zhuǎn)發(fā)到B服務器??梢允褂靡韵旅睿?/h3>
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination <B服務器的IP地址>:80
iptables -t nat -A POSTROUTING -p tcp -d <B服務器的IP地址> --dport 80 -j SNAT --to-source <A服務器的IP地址>

這些規(guī)則將在 nat 表中添加兩條規(guī)則。第一條規(guī)則將目標端口為80的TCP流量重定向到B服務器的IP地址和端口80。第二條規(guī)則將響應流量的源IP地址更改為A服務器的IP地址。

3.3、 確保A服務器上的防火墻允許通過轉(zhuǎn)發(fā)的流量??梢允褂靡韵旅顏碓试S轉(zhuǎn)發(fā)的流量:

iptables -A FORWARD -p tcp -d <B服務器的IP地址> --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp -s <B服務器的IP地址> --sport 80 -m state --state ESTABLISHED,RELATED -j ACCEPT

3.4、 根據(jù)前三小節(jié)描述,以及docker-compose.yml中的ip分配,和http服務中的端口號,需要執(zhí)行的命令:

iptables -t nat -A PREROUTING -p tcp --dport 22345 -j DNAT --to-destination 172.24.25.17:22345
iptables -t nat -A POSTROUTING -p tcp -d 172.24.25.17 --dport 22345 -j SNAT --to-source 172.24.25.16
iptables -A FORWARD -p tcp -d 172.24.25.17 --dport 22345 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp -s 172.24.25.17 --sport 22345 -m state --state ESTABLISHED,RELATED -j ACCEPT

4、驗證效果

4.1、 在服務器B(work2容器)運行http服務。

cd /tmp && ./http-service

4.2、在終端(work0)請求服務器A

curl 172.24.25.16:22345/hello

4.3、 在終端(work0)查看相應數(shù)據(jù)

[root@work0 tmp]# curl 172.24.25.16:22345/hello
當前時間: 2023-08-17 06:43:03

4.4、查看服務器A的tcpdump

[root@work1 tmp]# tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
06:43:03.154012 IP work0.network-public.48936 > work1.22345: Flags [S], seq 2220603025, win 64240, options [mss 1460,sackOK,TS val 3194673893 ecr 0,nop,wscale 7], length 0
06:43:03.154157 IP work1.48936 > work2.network-public.22345: Flags [S], seq 2220603025, win 64240, options [mss 1460,sackOK,TS val 3194673893 ecr 0,nop,wscale 7], length 0
06:43:03.154185 IP work1.48936 > work2.network-public.22345: Flags [S], seq 2220603025, win 64240, options [mss 1460,sackOK,TS val 3194673893 ecr 0,nop,wscale 7], length 0
06:43:03.154305 IP work2.network-public.22345 > work1.48936: Flags [S.], seq 578213404, ack 2220603026, win 65160, options [mss 1460,sackOK,TS val 2378678745 ecr 3194673893,nop,wscale 7], length 0
06:43:03.154326 IP work1.22345 > work0.network-public.48936: Flags [S.], seq 578213404, ack 2220603026, win 65160, options [mss 1460,sackOK,TS val 2378678745 ecr 3194673893,nop,wscale 7], length 0
06:43:03.154339 IP work0.network-public.48936 > work1.22345: Flags [.], ack 1, win 502, options [nop,nop,TS val 3194673894 ecr 2378678745], length 0
06:43:03.154341 IP work1.48936 > work2.network-public.22345: Flags [.], ack 1, win 502, options [nop,nop,TS val 3194673894 ecr 2378678745], length 0
06:43:03.154516 IP work0.network-public.48936 > work1.22345: Flags [P.], seq 1:88, ack 1, win 502, options [nop,nop,TS val 3194673894 ecr 2378678745], length 87
06:43:03.154521 IP work1.48936 > work2.network-public.22345: Flags [P.], seq 1:88, ack 1, win 502, options [nop,nop,TS val 3194673894 ecr 2378678745], length 87
06:43:03.154529 IP work2.network-public.22345 > work1.48936: Flags [.], ack 88, win 509, options [nop,nop,TS val 2378678745 ecr 3194673894], length 0
06:43:03.154531 IP work1.22345 > work0.network-public.48936: Flags [.], ack 88, win 509, options [nop,nop,TS val 2378678745 ecr 3194673894], length 0
06:43:03.154943 IP work2.network-public.22345 > work1.48936: Flags [P.], seq 1:152, ack 88, win 509, options [nop,nop,TS val 2378678745 ecr 3194673894], length 151
06:43:03.154950 IP work1.22345 > work0.network-public.48936: Flags [P.], seq 1:152, ack 88, win 509, options [nop,nop,TS val 2378678745 ecr 3194673894], length 151
06:43:03.154997 IP work0.network-public.48936 > work1.22345: Flags [.], ack 152, win 501, options [nop,nop,TS val 3194673894 ecr 2378678745], length 0
06:43:03.155002 IP work1.48936 > work2.network-public.22345: Flags [.], ack 152, win 501, options [nop,nop,TS val 3194673894 ecr 2378678745], length 0
06:43:03.155159 IP work0.network-public.48936 > work1.22345: Flags [F.], seq 88, ack 152, win 501, options [nop,nop,TS val 3194673894 ecr 2378678745], length 0
06:43:03.155166 IP work1.48936 > work2.network-public.22345: Flags [F.], seq 88, ack 152, win 501, options [nop,nop,TS val 3194673894 ecr 2378678745], length 0
06:43:03.155247 IP work2.network-public.22345 > work1.48936: Flags [F.], seq 152, ack 89, win 509, options [nop,nop,TS val 2378678745 ecr 3194673894], length 0
06:43:03.155255 IP work1.22345 > work0.network-public.48936: Flags [F.], seq 152, ack 89, win 509, options [nop,nop,TS val 2378678745 ecr 3194673894], length 0
06:43:03.155350 IP work0.network-public.48936 > work1.22345: Flags [.], ack 153, win 501, options [nop,nop,TS val 3194673895 ecr 2378678745], length 0
06:43:03.155354 IP work1.48936 > work2.network-public.22345: Flags [.], ack 153, win 501, options [nop,nop,TS val 3194673895 ecr 2378678745], length 0

5 版本信息

[root@work1 tmp]# iptables --version
iptables v1.4.21
[root@work1 tmp]# cat /etc/*release
CentOS Linux release 7.9.2009 (Core)
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
CentOS Linux release 7.9.2009 (Core)
CentOS Linux release 7.9.2009 (Core)

到此這篇關(guān)于通過iptables將http請求從A服務器轉(zhuǎn)發(fā)到B服務器的文章就介紹到這了,更多相關(guān)iptables將http請求從A服務器轉(zhuǎn)發(fā)到B服務器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • kubernetes使用kubeadm創(chuàng)建集群實操教程(全)

    kubernetes使用kubeadm創(chuàng)建集群實操教程(全)

    安裝kubernetes的方式,分別是kubeadm引導集群、kOps、Kubespray,本文采用kubeadm引導集群的方式,主要運用了安裝kubeadm、對kubeadm進行故障排查、使用kubeadm創(chuàng)建集群,目標是要安裝單個控制平面的Kubernetes集群,在集群上安裝Pod網(wǎng)絡,以便Pod可以相互連通
    2024-06-06
  • ETag使用效果對比及ETag配置圖文教程

    ETag使用效果對比及ETag配置圖文教程

    強烈建議大家設置sitemap的ETag,簡簡單單的一個小動作就能看到相對明顯的效果還是很不錯的,需要的朋友可以參考下
    2016-05-05
  • iptables如何配置NAT實現(xiàn)端口轉(zhuǎn)發(fā)

    iptables如何配置NAT實現(xiàn)端口轉(zhuǎn)發(fā)

    這篇文章主要介紹了iptables如何配置NAT實現(xiàn)端口轉(zhuǎn)發(fā),本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • 在vscode中使用Git的教程

    在vscode中使用Git的教程

    這篇文章主要介紹了在vscode中使用Git的教程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • X-Frame-Options頭未設置 防止網(wǎng)頁被iframe內(nèi)框架調(diào)用

    X-Frame-Options頭未設置 防止網(wǎng)頁被iframe內(nèi)框架調(diào)用

    有時候為了防止網(wǎng)頁被別人的網(wǎng)站iFrame,我們可以通過在服務器設置HTTP頭部中的X-Frame-Options信息,需要的朋友可以參考下
    2017-03-03
  • Linux下搭建HTTP服務器完成圖片顯示功能

    Linux下搭建HTTP服務器完成圖片顯示功能

    這篇文章作為Linux下socket(TCP)網(wǎng)絡編程的練習,使用C語言代碼搭建一個簡單的HTTP服務器,完成與瀏覽器之間的交互,最終在瀏覽器上顯示一張圖片;通過這個例子可以鞏固socket里多線程使用,也可以方便學習了解HTTP協(xié)議
    2022-04-04
  • GitLab?Pipeline規(guī)范及流程觸發(fā)詳解

    GitLab?Pipeline規(guī)范及流程觸發(fā)詳解

    這篇文章主要為大家介紹了GitLab?Pipeline規(guī)范及流程觸發(fā)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Raid教程 全程圖解手把手教你做RAID

    Raid教程 全程圖解手把手教你做RAID

    本文要以一個具體的磁盤陣列配置方法為例向大家介紹磁盤陣列的一些基本配置方法,給出一些關(guān)鍵界面,使各位對磁盤陣列的配置有一個理性認識,因為不同品牌的服務器配置略有不同,大家可以到官方網(wǎng)站搜下
    2013-06-06
  • django項目、vue項目部署云服務器的詳細過程

    django項目、vue項目部署云服務器的詳細過程

    這篇文章主要介紹了django項目、vue項目部署云服務器的詳細過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • SVN使用教程_動力節(jié)點Java學院整理

    SVN使用教程_動力節(jié)點Java學院整理

    這篇文章主要為大家詳細介紹了SVN使用教程和注意事項,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08

最新評論