現在、ポート80でNASボックスを実行しています。外部からNASにアクセスするために、次のようにNASのポート8080をポート80にマッピングしました。
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.32.25.2:80
これは魅力のように機能しています。ただし、これは、ネットワークの外部(職場、別の家など)からWebサイトにアクセスしている場合にのみ機能します。したがって、mywebsite.com:8080
と入力すると、IPTablesが正しく機能し、すべてが正常に機能します。
さて、私が抱えている問題は、ネットワークの内部からこのポートをリダイレクトするにはどうすればよいですか?私のドメイン名mywebsite.com
は内部(10.32.25.1)からルーター(私のLinuxサーバー)を指していますが、内部から10.32.25.2のポート8080にポート8080をリダイレクトします。
どんな手掛かり?
この質問を容易にするために、私はこの図をまとめました。お探しの情報が間違っていたり、誤って表示されている場合は、遠慮なく更新してください。
iptables
| .---------------.
.-,( ),-. v port 80 |
.-( )-. port 8080________ | |
( internet )------------>[_...__...°]------------->| NAS |
'-( ).-' 10.32.25.2 ^ 10.32.25.1 | |
'-.( ).-' | | |
| '---------------'
|
|
__ _
[__]|=|
/::/|_|
ようやくハウツーを見つけました。まず、-i eth1
私の「外部」ルールに(eth1はmy WAN接続)です。他に2つのルールを追加する必要もありました。最後に、私が付いてきたもの:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A POSTROUTING -p tcp -d 10.32.25.2 --dport 80 -j MASQUERADE
また、宛先NATを実行できるようにするには、パッケージ転送を有効にする必要があることを忘れていました。デフォルトでは、通常はオフになっているため、iptablesルールは機能しません。次のコマンドを発行して有効にできます。
echo 1 > /proc/sys/net/ipv4/ip_forward
最初に次の転送を許可
echo 1 > /proc/sys/net/ipv4/ip_forward
次にiptableルールを設定します
IF=eth1
PORT_FROM=8080
PORT_TO=80
DEST=10.32.25.2
iptables -t nat -A PREROUTING -i $IF -p tcp --dport $PORT_FROM -j DNAT --to $DEST:$PORT_TO
iptables -t nat -A POSTROUTING -p tcp -d $DEST --dport $PORT_TO -j MASQUERADE
たとえば、これらの行を/etc/rc.local
に入れることができます。注意:Debian jessieはそれを実行可能にしてrc.localサービスを有効にしてから
systemctl enable rc-local.service
最初に、転送がアクティブになっていることを確認する必要があります。
cat /proc/sys/net/ipv4/ip_forward
そうでない場合1
、実行echo 1 > /proc/sys/net/ipv4/ip_forward
。
ポート80および443で10.32.25.1にヒットするトラフィックを10.32.25.2の80ポートに転送する場合は、以下のルールを使用する必要があります。
iptables -t nat -A PREROUTING -d 10.32.25.1 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 10.32.25.2:80