无法在 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 问题?
Passed AWS Certified Solutions Architect – Associate exam on 1st Feb.2017