Quero encaminhar solicitações de 192.168.99.100:80
para 127.0.0.1:8000
. É assim que eu faria no linux usando iptables
:
iptables -t nat -A OUTPUT -p tcp --dport 80 -d 192.168.99.100 -j DNAT --to-destination 127.0.0.1:8000
Como faço a mesma coisa no MacOS X? Eu tentei uma combinação de ipfw
comandos sem muito sucesso:
ipfw add fwd 127.0.0.1,8000 tcp from any to 192.168.99.100 80
(Para mim, o sucesso é apontar um navegador http://192.168.99.100
e obter uma resposta de um servidor de desenvolvimento em que estou executando localhost:8000
)
Respostas:
Então eu descobri uma maneira de fazer isso. Não tenho certeza se é a maneira preferida, mas funciona! No seu shell favorito:
(O apelido para
lo0
parece ser a parte que falta)Se você deseja que um domínio (falso) aponte para esse novo alias, verifique se o / etc / hosts contém a linha:
fonte
Consegui fazer isso funcionar usando os comandos
ifconfig
epfctl
no Mac 10.10.2. Com a abordagem a seguir, estou mapeando127.0.0.1:3000
com sucessomydomain.com
localmente na minha máquina.Em sua linha de comando digite os dois comandos a seguir para encaminhar ligações para
127.0.0.1:3000
a10.0.0.1
:Em seguida, edite seu arquivo
/etc/hosts
ou/private/etc/hosts
e adicione a seguinte linha para mapear seu domínio10.0.0.1
.Depois de salvar o arquivo hosts, limpe o DNS local:
Agora abra
mydomain.com
em um navegador e você verá o servidor hospedado na porta do host local (ou seja127.0.0.1:3000
). Basicamente, esse processo mapeia um<ip>:<port>
para um novo,<ip>
para que você possa mapear um host com esse IP.fonte
sudo discoveryutil udnsflushcaches
me dá,command not found
mas ainda corresponde à entrada corretamente. Mas como posso mapear uma segunda porta? Tentei executar as etapas 1 + 2 com id:10.0.0.2
e outra porta, mas sempre leva apenas a última conexão. Então, se eu durar10.0.0.1
eport 3000
avançar3000
, se durar10.0.0.2
e portá-4000
lo para frente4000
. No meu,/private/etc/hosts
eu escrevi as duas entradas com o (de acordo) id diferente.sudo dscacheutil -flushcache
Eu também tive que fazer uma coisa semelhante recentemente, e na busca encontrei esta resposta. Infelizmente, a resposta dos usos do Nafe,
ipfw
que agora está obsoleta e indisponível no OSX; e a resposta de Kevin Leary é realmente um pouco tola. Então eu tive que fazer algo melhor (mais limpo) e decidi compartilhá-lo aqui para a posteridade. Esta resposta é amplamente baseada na abordagem mencionada nesta essência .Como o OP menciona, apontar um navegador para 192.168.99.100 deve obter uma resposta de um servidor em localhost: 8000. Adicionar um alias a
ifconfig
não é realmente necessário, porpfctl
si só é suficiente: para conseguir isso, opf.conf
arquivo/etc/pf.conf
precisa ser modificado.Primeiro criamos (com sudo) um novo arquivo de âncora (vamos chamá-lo
redirection
) em:/etc/pf.anchors/redirection
. Este é basicamente um arquivo de texto regular e contém a seguinte linha (assim como na resposta de Kevin Leary):rdr pass on lo0 inet proto tcp from any to 192.168.99.100 port = 80 -> 127.0.0.1 port 8000
. Depois que o novo arquivo âncora for criado, ele precisará ser referenciado dentro dopf.conf
arquivo. Abra opf.conf
arquivo com sudo e adicionerdr-anchor "redirection"
após a última linha rdr-anchor (que érdr-anchor "com.apple/*"
) e adicioneload anchor "redirection" from "/etc/pf.anchors/redirection"
no final.Por fim, é assim que o arquivo pf.conf deve se parecer:
E é quase isso. Basta reiniciar
pfctl
emitindosudo pfctl -d
para desativá-lo primeiro e depoissudo pfctl -fe /etc/pf.conf
iniciá-lo novamente.Agora, se você precisar que isso aconteça automaticamente após cada reinicialização, outro pequeno trabalho precisará ser feito: o daemon de inicialização
pfctl
precisa ser atualizado (a essência referenciada menciona que o pf é ativado automaticamente na inicialização, no entanto, isso não parece ser caso de olhar para o código). Abra (com sudo)System/Library/LaunchDaemons/com.apple.pfctl.plist
e procure o seguinte:e adicione a linha
<string>-e</string>
para torná-lo assim:Isso deve resolver.
Advertência : A Apple não permite mais alterar os arquivos demon de inicialização assim (não com sudo, nem chmod, nem qualquer outra coisa). A única maneira é mexer com as configurações da Proteção de integridade do sistema : inicialize no modo de recuperação e inicie o terminal. Verifique o status do SIP com
csrutil status
, geralmente ele deve estar ativado. Desative-ocsrutil disable
e reinicie-o no modo normal e faça as alterações no arquivo plist conforme discutido acima. Depois de concluído, volte ao modo de recuperação e reative a proteção (está em vigor por um bom motivo) emitindocsrutil enable
.Explicação: Pode-se verificar emitindo o
ifconfig
comando que127.0.0.1
já é o alias (padrão) para localhost lo0 - esse fato está sendo usado para evitar a necessidade de adicionar um alias extra para localhost e simplesmente usar o endereço padrão nopf.conf
arquivo.ATUALIZAÇÃO: Infelizmente, parece que carregar o arquivo na inicialização não funciona. Ainda estou tentando obter ajuda para classificá-lo. Até lá, correr
sudo pfctl -f /etc/pf.conf
depois de iniciar faz o truque.fonte
System/Library/LaunchDaemons/com.apple.pfctl.plist
; isso provavelmente não sobreviveria a uma atualização do sistema operacional?Isto funcionou bem para mim:
Adicione a seguinte linha ao arquivo de inicialização, conforme descrito aqui: http://xeiam.com/port-forwarding-80-to-8080-using-ipfw-on-mac-os-x/
add 100 fwd 127.0.0.1,8080 tcp from any to any 80 in
fonte
A partir da 10.5, o OS X vem com um novo firewall orientado a aplicativos em vez de
ipfw
. Mas o ipfw ainda está instalado. Se você tiver problemas com sua sintaxe, consulte frontends gráficos comoWaterRoof
ouFlying Buttress
.HTH, PEra
fonte
a ordem das regras é importante, verifique se não há "negar tudo" antes das regras de permissão ou algo assim.
fonte
65535 allow ip from any to any
).Parece que seu comando está faltando um número de regra; experimentar:
(se você não estiver executando como root, precisará prefixá-lo com sudo). Outra coisa a verificar é se o firewall está ativado:
Se retornar com o valor 0 (desativado), ative-o com:
... e, em seguida, solicite a reativação quando o computador reiniciar. A maneira "correta" de fazer isso é provavelmente criar um item launchd (o Lingon facilita bastante isso). Ou apenas use uma das ferramentas GUI mencionadas no PEra e deixe que ele cuide dos detalhes.
fonte