1

я изучал iptables немного глубже, и дела шли хорошо, но я запутался с использованием DNAT, SNAT и MASQUERADE, я занимался с ними параграфами и не мог найти способ просто перенаправить трафик с одного интерфейса на другой, как пытался маршрутизируя трафик от адаптера только для хоста virtualbox к eth0(я действительно не знаю, возможно ли это с iptables), я нашел несколько сообщений в Интернете на эту тему (например, маршрутизация между wlan0 на eth0 и т. д.) с большим количеством синтаксиса iptables, но, похоже, ни один работать, поэтому любой может предоставить правильный синтаксис для этого или даже может сказать, может быть с какой-то другой таблицей в iptables или, по крайней мере, с использованием SNAT, DNAT и MASQUERADE.

2 ответа2

3

Прежде чем перейти на iptables, это не единственное, что вам нужно. Во-первых, на хосте вы должны включить пересылку IPv4,

 echo 1 > /proc/sys/net/ipv4/ip_forward

и на гостевой, вы должны установить шлюз по умолчанию,

 ip route add default via 192.168.56.1 dev eth0

если ваш внутренний адаптер использует подсеть 192.168.56.0/24 (по умолчанию), в противном случае измените соответствующим образом.

Что касается iptables: пакеты, поступающие через внутренний адаптер и пытающиеся подключиться к Интернету, будут иметь в качестве исходного адреса адрес гостя, который в вашей локальной сети, конечно, никто не знает, поскольку он принадлежит другой подсети, 192.168.56.1 . Так что он никогда не получит ответ. Таким образом, нам нужно правило iptables которое переписывает адрес источника, чтобы он был адресом хоста, который может быть достигнут вашим маршрутизатором / модемом / шлюзом. iptables сам будет отслеживать соединение, чтобы ответные пакеты были правильно отправлены гостю, а не были задержаны хостом; нам не нужно ничего делать.

Оба эти правила iptables будут работать,

    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 
    iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.15

(приведенное выше предполагает, что хост имеет IP-адрес 192.168.1.15 и подключен к вашему модему / шлюзу / маршрутизатору через eth0 ; если нет, измените его соответствующим образом). Разница между этими двумя утверждениями очевидна: с SNAT вы должны явно указать IP-адрес интерфейса, а с MASQUERADE - нет. Таким образом, если по какой-либо причине ваш IP-адрес интерфейса изменяется, правило с SNAT больше не является правильным, тогда как правило с MASQUERADE (которое проверяет IP-адрес каждый раз, когда оно используется), вам не нужно корректировать правило. Очевидно, что MASQUERADE немного медленнее, чем SNAT.

Лично я предпочитаю MASQUERADE, потому что он делает мою конфигурацию брандмауэра переносимой, но, как говорится, YMMV.

0
iptables -t nat -A POSTROUTING -s 192.168.56.0/24 -d 0/0 -j MASQUERADE

Замените 192.168.56.0/24 на ваш сетевой адрес только для хоста, и он должен работать.

Но это будет одно направление от Host_only по сети ethX/wlanX и дальше, используя шлюз по умолчанию на вашем хосте. Если вы хотите пойти в противоположном направлении, то все ваши устройства должны иметь шлюз по умолчанию, указывающий на ваш IP-адрес ethX/wlanX

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .