Iptables

使用我的 IPSec strongswan 隧道將特定埠上的傳入流量鏡像到另一個 IP

  • August 9, 2021

我想使用strongswan. 我strongswan在 docker 容器中執行。

為此,我希望我的內部伺服器192.168.0.12監聽其 25 埠並將流量轉發到同一埠上的隧道伺服器10.0.0.10:25

到目前為止,我嘗試使用 iptables,但沒有成功。

net.ipv4.ip_forward在主機和 docker 容器上都啟用了!

iptables-save192.168.0.12strongswan 連接到隧道後打開:(是的,我可以從 192.168.0.12 ping 10.0.0.10)

# Generated by iptables-save v1.8.4 on Fri Jul 23 09:55:05 2021
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -s 10.0.0.0/16 -d 192.168.0.10/32 -i eth0 -m policy --dir in --pol ipsec --reqid 1 --proto esp -j ACCEPT
-A OUTPUT -s 192.168.0.10/32 -d 10.0.0.0/16 -o eth0 -m policy --dir out --pol ipsec --reqid 1 --proto esp -j ACCEPT
COMMIT
# Completed on Fri Jul 23 09:55:05 2021
# Generated by iptables-save v1.8.4 on Fri Jul 23 09:55:05 2021
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [2:1600]
:POSTROUTING ACCEPT [2:1600]
:DOCKER_OUTPUT - [0:0]
:DOCKER_POSTROUTING - [0:0]
-A OUTPUT -d 127.0.0.11/32 -j DOCKER_OUTPUT
-A POSTROUTING -d 127.0.0.11/32 -j DOCKER_POSTROUTING
-A DOCKER_OUTPUT -d 127.0.0.11/32 -p tcp -m tcp --dport 53 -j DNAT --to-destination 127.0.0.11:45165
-A DOCKER_OUTPUT -d 127.0.0.11/32 -p udp -m udp --dport 53 -j DNAT --to-destination 127.0.0.11:53306
-A DOCKER_POSTROUTING -s 127.0.0.11/32 -p tcp -m tcp --sport 45165 -j SNAT --to-source :53
-A DOCKER_POSTROUTING -s 127.0.0.11/32 -p udp -m udp --sport 53306 -j SNAT --to-source :53
COMMIT

命令ip r輸出:

default via 192.168.16.1 dev eth0
192.168.16.0/20 dev eth0 proto kernel scope link src 192.168.16.10 # this is a docker internal network for my services
192.168.0.10/30 dev eth1 proto kernel scope link src 192.168.0.12

我嘗試了以下各種命令:

iptables -t nat -A PREROUTING -p tcp --dport 25 -j DNAT --to-destination 10.0.0.10:25
iptables -t nat -A POSTROUTING -p tcp -d 10.0.0.10 --dport 25 -j SNAT --to-source 192.168.0.12

但沒有成功。

我無法提供有關ip r主機或iptables-save.

我究竟做錯了什麼?

我使用traefik.

192.168.0.12我在主機 ( )上安裝了 traefik,strongswan tunnel並使用 aTCP router將所有流量轉發到隧道。

traefik安裝:

wget -O /traefik.tar.gz https://github.com/traefik/traefik/releases/download/v2.4.12/traefik_v2.4.12_linux_amd64.tar.gz \
   && tar -zxvf /traefik.tar.gz \
   && ln -s /traefik /usr/bin/traefik

traefik.yaml:

entryPoints:
 smtp:
   address: ":1025"

accessLog: {}

providers:
 file:
   directory: /traefik-conf/dynamic/
   watch: true

api:
 dashboard: true
 insecure: true

我的/traefik-conf/dynamic/dynamic.yaml

tcp:
 routers:
   smtp-router:
     rule: "HostSNI(`*`)"
     entryPoints:
       - smtp
     service: smtp-service

 services:
   smtp-service:
     loadBalancer:
       servers:
         - address: 10.0.0.10:25

執行traefik(我不知道如何正確地將其作為後台守護程序執行):

traefik --configfile /traefik-conf/traefik.yml &

現在我可以smtp server使用192.168.0.12:1025.

我在 github 上使用 docker 創建了一個範例

引用自:https://serverfault.com/questions/1070419