无法在 AWS 中使用 Iptables 和 Strongswan 对 IP 进行 NAT

Posted

技术标签:

【中文标题】无法在 AWS 中使用 Iptables 和 Strongswan 对 IP 进行 NAT【英文标题】:Unable to NAT IP with Iptables and Strongswan in AWS 【发布时间】:2021-02-08 15:21:27 【问题描述】:

我刚刚配置了 Strongswan,并且可以在 AWS EC2 实例上成功启动 *** 隧道,但是我遇到了流量问题,因为我们需要对我的 EC2 实例的私有 IP 地址进行 NAT,以便所有流量都通过*** 来自特定 IP。

但目前,如果我 ping [DESTINATION_IP] 地址,我的流量仍然来自我的私有 IP。我在 iptables 中尝试了几个 PREROUTING 和 POSTROUTING 规则,但似乎没有任何效果。谁能解释一下可能是什么问题?

当前设置

在 AWS 源/目标检查中禁用。

strongswan statusall

Listening IP addresses:
  [PRIVATE_IP]
Connections:
          ***:  %any...[***_FIREWALL_IP]  IKEv2, dpddelay=10s
          ***:   local:  [[ELASTIC_PUBLIC_IP]] uses pre-shared key authentication
          ***:   remote: [[***_FIREWALL_IP]] uses pre-shared key authentication
          ***:   child:  0.0.0.0/0 === [DESTINATION_IP]/32 TUNNEL, dpdaction=restart
Security Associations (1 up, 0 connecting):
          ***[1]: ESTABLISHED 5 seconds ago, [PRIVATE_IP][[ELASTIC_PUBLIC_IP]]...[***_FIREWALL_IP][[***_FIREWALL_IP]]
          ***[1]: IKEv2 SPIs: 6055db442ef8607c_i* 3d2ec0bb945e9a2c_r, pre-shared key reauthentication in 7 hours
          ***[1]: IKE proposal: AES_CBC_128/HMAC_SHA2_256_128/PRF_HMAC_SHA1/MODP_2048
          ***1:  INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: ca9d2ca0_i df70a539_o
          ***1:  AES_CBC_128/HMAC_SHA1_96, 0 bytes_i, 0 bytes_o, rekeying in 46 minutes
          ***1:   [NAT_SOURCE_IP]/31 === [DESTINATION_IP]/32

ipsec.conf

config setup
    charondebug="all"
    uniqueids=no

conn %default
    ikelifetime=28800s
    keyexchange=ikev2
    keylife=3600s
    keyingtries=%forever
    mobike=no

conn ***
    authby=psk
    auto=start
    dpddelay=10s
    dpdtimeout=30s
    dpdaction=restart
    ike=aes128-sha256-prfsha1-modp2048!
    esp=aes128-sha256-modp2048,aes128-sha1-modp2048!
    left=%defaultroute
    leftid=[ELASTIC_PUBLIC_IP]
    leftsubnet=0.0.0.0/0
    leftfirewall=yes
    rightsubnet=[DESTINATION_IP]/32
    right=[***_FIREWALL_IP]
    rightid=[***_FIREWALL_IP]
    type=tunnel
    mark=100

iptables-save

*nat
:PREROUTING ACCEPT [9728:543855]
:INPUT ACCEPT [7882:388791]
:OUTPUT ACCEPT [20219:1527154]
:POSTROUTING ACCEPT [20725:1569658]
COMMIT
*filter
:INPUT ACCEPT [142:30437]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [188:34735]
-A FORWARD -s [DESTINATION_IP]/32 -d [NAT_SOURCE_IP]/31 -i eth0 -m policy --dir in --pol ipsec --reqid 1 --proto esp -j ACCEPT
-A FORWARD -s [NAT_SOURCE_IP]/31 -d [DESTINATION_IP]/32 -o eth0 -m policy --dir out --pol ipsec --reqid 1 --proto esp -j ACCEPT
COMMIT

【问题讨论】:

【参考方案1】:

如果我正确理解您的问题,您是在询问如何使用 Strongswan 在 EC2 实例上设置源 NAT。我运行相同的设置,就我而言,遵循 [1] 中的 iptables 规则提供了请求的功能:

iptables -t nat -A POSTROUTING -s <NAT_SOURCE_IP>/24 -o eth0 -m policy --dir out --pol ipsec -j ACCEPT
iptables -t nat -A POSTROUTING -s <NAT_SOURCE_IP>/24 -o eth0 -j MASQUERADE

[1]https://wiki.strongswan.org/projects/strongswan/wiki/ForwardingAndSplitTunneling

【讨论】:

以上是关于无法在 AWS 中使用 Iptables 和 Strongswan 对 IP 进行 NAT的主要内容,如果未能解决你的问题,请参考以下文章

AWS ElasticBeanstalk 上的 Docker:“host.docker.internal:host-gateway”:连接被拒绝。 iptables 问题?

Centos7中iptables规则无法保存

Passed AWS Certified Solutions Architect – Associate exam on 1st Feb.2017

无法使用 AWS 设备场打开和关闭通知面板

iptables的nat使用记事

linux命令打开关闭防火墙iptables