13 novembre 2016

Mac OS X : redirection de port TCP vers une VM

Parfois on aimerait ouvrir un serveur web (nginx) sur internet, mais :
  1. on a pris pour acquis qu’on ne ferait plus tourner les services que sur des VMs,
  2. on ne veut pas ouvrir trop grandes les brèches, donc :
  3. on n’installera pas de service applicatif sur l’hôte (nginx ou Apache, pour du reverse proxying, qui pourraient être compromis, sans oublier qu’ils ralentiraient l’ensemble).
Bref, une redirection de port semble la bonne solution.

Sachant que la VM a une interface NAT et une interface host-only — c’est celle qui nous intéresse là.
  • La VM n’est donc pas visible sur le LAN, donc a fortiori n’est pas visible par le routeur.
  • Note : on ne mettra pas d’interface bridged.
Et l’hôte étant un Mac OS X, iptables est hors de question.
  • On pourrait éventuellement jouer avec pf (via pfctl), mais ce n’est pas la peine.
Versions :
  • Routeur : Freebox OS 3.3.3.
  • Hôte : Mac OS X Sierra 10.12.1 + VirtualBox 5.1.18
  • VM : Debian 8.6 64-bit

Ne surtout pas se lancer dans de la configuration pf avec pfctl (rdr ne concerne que les redirections de port sur le même hôte ; nat retraduit les adresses IP entrantes…).

Au contraire, utiliser le port forwarding natif de VirtualBox, sur l’interface NAT (et pas host-only, astuce) :

$ VBoxManage modifyvm --natpf1 ,tcp,,5080,,80
$ VBoxManage modifyvm --nataliasmode1 proxyonly

La partie « --nataliasmode1 proxyonly » permet d’avoir la vraie remote_addr initiale dans les logs nginx, et pas celle du Host.