Назад | Перейти на главную страницу

Как получить входящий IP-адрес из виртуального бокса

Я настраиваю http-сервер (apache) под VB и перенаправляю порт с хоста с помощью доступного инструмента в VB. Моя сеть VB связана с хостом через NAT.

Однако при этом в журнале доступа http отображается только один и тот же IP-адрес для каждого соединения. (от 10.x.x.x, который является IP-адресом хоста).

Есть ли способ увидеть настоящий IP-адрес? Я попытался настроить журнал iptables на хосте, но он не показывает данные (только src, dest.ttl .. вы знаете ..)

Вы можете настроить NAT на своей виртуальной машине с помощью

vboxmanage --nataliasmode1 proxyonly

для отключения алиасинга и переключения NAT в прозрачный режим.

Подробнее см. Здесь: https://www.virtualbox.org/manual/ch09.html#nat-adv-alias

Ваша виртуальная машина находится за NAT в вашей настройке, и вы фактически получаете доступ к веб-серверу через переадресацию портов, поэтому вы не можете раскрыть IP-адреса клиентов, используя только виртуальный бокс. Одна вещь, которую вы можете сделать, - это настроить на своем хосте несколько облегченный веб-сервер (например, nginx или lighttpd), который будет прослушивать порт 80 в вашей сети, работая в режиме обратного прокси на ваш перенаправленный порт, чтобы ваша виртуальная машина работала как бэкэнд в этой настройке. Чтобы получить IP-адрес клиента, этот веб-сервер должен передать некоторые дополнительные переменные, например X-Real-IP, Host, X-Forwarded-For (вот пример виртуального хоста для nginx при условии, что ваша виртуальная машина перенаправляет свой порт 80 на локальный 8080):

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header X-Real-IP $remote_arrd;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
    }
}