WindowsおよびWSL2で開発し、.NETアプリケーションがWindowsのポート44301で提供され、localhost:44301のWSL2(Ubuntu)からアクセスできるようにする必要があるユースケースがあります。
WindowsホストにWSL2内で接続できるIPがあることを知っていますが(検索を使用できますgrep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'
)、これは私が達成したいものではありません。私がしたいのは、Windowsのポート44301をWSL2のlocalhost:44301に渡すことです。
答え1
私はWSL2についてはよくわかりませんが、実際のLinuxでは次のことができます。
#!/bin/sh
SERVERIP=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}')
# Turn on the IPv4 packet forwarding master switch
sysctl net.ipv4.ip_forward=1
# Change the destination of TCP packets arriving to loopback interface's
# port 44301 to the same port on the actual Windows server
iptables -t nat -A PREROUTING -i lo -p tcp --dport 44301 -j DNAT --to-destination $SERVERIP
# Allow the forwarding of any existing forwarded connections
# (to ensure replies from the Windows server are also allowed)
iptables -t filter -A FORWARD -m conntrack --ctstate ESTABLISHED -j ACCEPT
# Allow the forwarding of connections arriving to loopback TCP port 44301
iptables -t filter -A FORWARD -p tcp -i lo --dport 44301 -j ACCEPT