Windows7でもiptablesのFORWARDみたいな事がしたくってやってみたら出来なくなってた
Windows7内のXPモードであるWindowsXPで、TCPでポートを待ち受けるサーバー的なものを動かしたくて、どうにかしてポートフォワード*1をしようとしてます。sshポートフォワードとか色々方法を考えているとき、Linuxならiptablesでフォワードがあったよなぁと思い出し、Windowsでも何かないかと調べてみたら、見つけました。
そして、Windows7だと出来ないことがわかったので、残念だけどそこまでをメモしておきます。
Windows7のXPモードにサーバーを立てて別PCからアクセスする - kanonjiの日記
ちなみにやりたかったのはこれです。結局iptables的なFORWARDは無理だったけど、学習も兼ねて、sshポートフォワード、stone、ルーティングテーブル書き換えの3つの方法でやってみました。
出来るはずだった方法
Remote Accsess and Routingサービス*2というものがあり、これを有効にするとWindowsでもiptablesっぽい事が出来るようになる。
Remote Accsess and Routingサービスを起動
>ipconfig /all Windows IP 構成 ホスト名 . . . . . . . . . . . . : mypc プライマリ DNS サフィックス . . . . . . . : ノード タイプ . . . . . . . . . . . . : ハイブリッド IP ルーティング有効 . . . . . . . . : はい WINS プロキシ有効 . . . . . . . . : いいえ イーサネット アダプター ローカル エリア接続: [snip]
Remote Accsess and Routingサービスが起動すると、このIP ルーティング有効
がはい
になります。
もしくはレジストリで有効化
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters の IPEnableRouter のdwordを1にすればルーティング自体は許可になります。 その後適当にルートを追加。
https://twitter.com/pankazuda/status/228117970163990528
Twitterで教えてもらった話ではレジストリを変更しても、IP ルーティング有効
がはい
になるとの事。結局ポートフォワードが出来なかったので、Remote Accsess and Routingサービスを使う場合と機能的な違いがあるのかどうか、わかりませんでした。
netshコマンドで設定
>netsh [コンテキスト((Linuxのサブコマンド?))] [サブコンテキスト]...
netsh
というコマンドで色々と設定できるようです。コンテキストと呼ぶサブコマンド的なものが沢山あります。正直ありすぎてよくわからない。
routing ip nat add/delete portmapping
IP routing commands | Microsoft Docs
検索したところ、ポートフォワードはrouting
コンテキストのip
サブコンテキストのnat
*3でadd
コマンドなどを書くという使い方になるらしい。
add portmapping name="Local Area Connection" tcp 0.0.0.0 80 10.0.0.1 80
http://technet.microsoft.com/ja-jp/library/cc754535(v=WS.10).aspx#BKMK_96
サブコンテキストまでが省略されてるけど、こんな使い方になるっぽい。
後述する理由によって、結局出来なかったからこれ以上はわからないけど、このコマンドで設定すれば普通にポートフォワードが出来そうな雰囲気ではあります。
出来ない理由
WindowsXPではRemote Accsess and Routingとnetsh natコマンドを使ってRouter化すればよかったけど、Windows7ではRRASを動かしただけでは、routingできている様子はないし、netshコマンドにNATの項目無いしなんでー?っておもってた。海外のフォーラムを漁ってみるとこんな情報が。
http://d.hatena.ne.jp/mad-capone/20110628/1309259276How to enable NAT on Windows 7...
I am not able to use netsh routing commands on WIndows 7. These commands work on Windows XP. Upon research I found that Windows 7 does not support routing commands. On Vista there was workaround by using "netsh add helper ipmontr.dll" and "netsh add helper ippromon.dll" but these commands does not work on Windows 7.
なんとWindowsXPでは出来たことがWindows7で出来なくなってるんだとか。引用元ではnetsh nat
と書いてるが、こっちの環境でもnetsh routing
が無いことを確認しました。routing
コンテキストが無くちゃ、ポートフォワードは設定できません。
マイクロソフトめ・・・
余談
>netsh ? 使用法: netsh [-a エイリアス ファイル名] [-c コンテキスト] [-r リモート コンピュ ーター名] [-u [ドメイン名\]ユーザー名] [-p パスワード | *] [コマンド | -f スクリプト ファイル名] 使用できるコマンドは次のとおりです: このコンテキストのコマンド: ? - コマンドの一覧を表示します。 add - エントリの一覧に構成エントリを追加します。 advfirewall - 'netsh advfirewall' コンテキストに変更します。 branchcache - 'netsh branchcache' コンテキストに変更します。 bridge - 'netsh bridge' コンテキストに変更します。 delete - エントリの一覧から構成エントリを削除します。 dhcpclient - 'netsh dhcpclient' コンテキストに変更します。 dnsclient - 'netsh dnsclient' コンテキストに変更します。 dump - 構成スクリプトを表示します。 exec - スクリプト ファイルを実行します。 firewall - 'netsh firewall' コンテキストに変更します。 help - コマンドの一覧を表示します。 http - 'netsh http' コンテキストに変更します。 interface - 'netsh interface' コンテキストに変更します。 ipsec - 'netsh ipsec' コンテキストに変更します。 lan - 'netsh lan' コンテキストに変更します。 mbn - 'netsh mbn' コンテキストに変更します。 namespace - 'netsh namespace' コンテキストに変更します。 nap - 'netsh nap' コンテキストに変更します。 netio - 'netsh netio' コンテキストに変更します。 p2p - 'netsh p2p' コンテキストに変更します。 ras - 'netsh ras' コンテキストに変更します。 rpc - 'netsh rpc' コンテキストに変更します。 set - 構成の設定を更新します。 show - 情報を表示します。 trace - 'netsh trace' コンテキストに変更します。 wcn - 'netsh wcn' コンテキストに変更します。 wfp - 'netsh wfp' コンテキストに変更します。 winhttp - 'netsh winhttp' コンテキストに変更します。 winsock - 'netsh winsock' コンテキストに変更します。 wlan - 'netsh wlan' コンテキストに変更します。 利用できるサブコンテキストは次のとおりです: advfirewall branchcache bridge dhcpclient dnsclient firewall http interface ips ec lan mbn namespace nap netio p2p ras rpc trace wcn wfp winhttp winsock wlan コマンドのヘルプを表示するには、コマンドの後にスペースを入れ、 ? と入力してください。
netsh
のコンテキストの一覧です。各コンテキストの説明が意味をなしてないのも苛立ちを覚える*4んですが、firewall
とadvfirewall
の似たコンテキスト、どうやら以前はfirewall
コンテキストで設定した事がadvfirewall
に移動してたりするらしいです。そういう変更を気軽に放り込んでくるのも、マイクロソフトのいやなところのひとつ。netsh
の情報源はあまり多くないので、ネットの情報が使えなくなってしまうよ・・・
routing
コンテキストが別名になってたり、別のコンテキストで出来そうなのないかなと思ったけど、説明が書いてないのでよくわからない。
参考
IP routing commands | Microsoft Docs
Netsh Routing IP NAT Context Commands | Microsoft Docs
http://d.hatena.ne.jp/mad-capone/20110628/1309259276
netsh routing ip nat add portmapping - Windows 2000/XP - コマンド
運用:常時接続時代のパーソナル・セキュリティ対策(第2回) 1.Routing and Remote Accessサービスとその使い方(1) - @IT
環境
OS | Windows7 Professional 64bit |