サーバー側のNATの送信元アドレスと宛先アドレスの変更:可能ですか?

サーバー側のNATの送信元アドレスと宛先アドレスの変更:可能ですか?

アドレスを持つ一般的なLANがあります192.168.2.x。いくつかのサービスを公開したいです。その他Wireguard VPN経由でホストします。

Wireguard サーバーは、パブリック アクセス可能なルーターではなく、パブリック ホストとして構成されたより強力なコンピューターで実行されています。 Wireguardは、現在10.0.0.xサーバーが使用しているアドレスを使用するように設定されています10.0.0.1

クライアントはIPを使用して自分のVPNサーバーに正常に接続し、10.0.0.2そのサーバーのサービスにアクセスしようとします10.0.0.1。ポートに基づいて(サーバー側)DNATを使用してパケットを(たとえば)192.168.2.1。これは基本的に機能します。 tcpdumpを使用すると、パケットが10.0.0.2srcとdstを介して送信されているため、192.168.2.1明らかに正しいホストに到着していることがわかります。

しかし、10.0.0.x私のWireguardサーバー以外のどこでもネットワークがわからないので(変更したくない)、192.168.2.1応答パケットをどこに送信するのかわかりません。私の考えでは、両方のソースを変更するサーバー側のNATバリアントが必要なようです。そして宛先IP

可能ですか?

混乱を減らすために簡単な概要を書いてみました。

VPN Host                                 LAN Service
IPs: 192.168.2.2, 10.0.0.1               192.168.2.1

Incoming Packet 
src: 10.0.0.2 dst: 10.0.0.1:666
masqueraded to:
src: 192.168.2.2 dst: 192.168.2.1:666

                                         receives packet
                                         src: 192.168.2.2 dst: 192.168.2.1:666

                                         sends answer packet
                                         src: 192.168.2.1:666 dst: 192.168.2.2

Receives answer packet:
src: 192.168.2.1:666 dst: 192.168.2.2
de-masqueraded to
src: 10.0.0.1:666 dst: 10.0.0.2

これが不可能な場合は、他にどのようなオプションがありますか?最終的には、ポートに基づいて別のローカルサーバーにパケットを転送したいと思います。

追加の注意:VPNの全体的な目的は、これらのサービスを公開することです。 VPNネットワーク(10.0.0.x)は、LAN内でサービスを公開するサーバーと、そのサービスを使用するリモートクライアントで構成する必要があります。

ベストアンサー1

私の質問に答える:この質問に対するIain Brownの答えに従って、結合されたDNATとSNATを正常に設定できます。 https://superuser.com/questions/1286555/iptables-port-forwarding-with-internal-snat:


いくつかの実験を行った後、私の質問に対する回答を得たようです。はい、可能で非常に簡単です。正しいアドレスとポートの組み合わせを取得してください。

私のスクリプトに関するコメント:

# summary:
# allow forwarding *to* destination ip:port
# allow forwarding *from* destination ip:port
# nat packets identified by arrival at external IP / port to have
#  *destination* internal ip:port
# nat packets identified by arrival at internal IP / port to have
#  *source* internal network IP of gateway machine

質問の例は次のとおりです。

# allow inbound and outbound forwarding
iptables -A FORWARD -p tcp -d 192.168.2.10 --dport 54321 -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.2.10 --sport 54321 -j ACCEPT

# route packets arriving at external IP/port to LAN machine
iptables -A PREROUTING -t nat -p tcp -d 1.2.3.4 --dport 12345 -j DNAT --to-destination 192.168.2.10:54321
# rewrite packets going to LAN machine (identified by address/port)
# to originate from gateway's internal address
iptables -A POSTROUTING -t nat -p tcp -d 192.168.2.10 --dport 54321 -j SNAT --to-source 192.168.2.5

実際のスクリプトは直接適用しやすくなります。

# EXTIP = external IP of gateway (1.2.3.4)
# EPORT = external port (12345)
# DIP   = destination IP in local network (192.168.2.10)
# DPORT = destination port (54321)
# INTIP = internal IP of gateway (192.168.2.5)

iptables -A FORWARD -p tcp -d $DIP --dport $DPORT -j ACCEPT
iptables -A FORWARD -p tcp -s $DIP --sport $DPORT -j ACCEPT

iptables -A PREROUTING -t nat -p tcp -d $EXTIP --dport $EPORT -j DNAT --to-destination $DIP:$DPORT
iptables -A POSTROUTING -t nat -p tcp -d $DIP --dport $DPORT -j SNAT --to-source $INTIP

おすすめ記事