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

Как сделать NAT на основе MAC в Linux?

У меня есть Linux-машина с сервером ubuntu с 2NICS (WAN и LAN). Я хочу, чтобы машины на стороне LAN использовали Linux в качестве шлюза для выхода в Интернет (сторона WAN). Единственная проблема заключается в том, что машины со стороны LAN будут иметь статические IP-адреса и не могут быть настроены для DHCP. Я должен работать с имеющимися у них настройками. Я написал небольшую программу, которая запускается на сервере, слушает запросы ARP, получает весь клиентский трафик и передает их через NAT на сторону WAN. Теперь клиенты могут пинговать Google независимо от своих статических IP-адресов.

Мой код выполняет NAT на основе MAC-адресов, т.е. пакеты клиента из XX: YY будут отправляться с использованием 10.0.0.1. как исходный адрес. Другой клиент с ZZ: ZZ будет иметь пакеты с адресом источника 10.0.0.2 на интерфейсе на стороне WAN. Цель всего этого - обеспечить доступ в Интернет с нулевой конфигурацией для подписанных пользователей портала.

Моя проблема в том, что мне не удается заставить TCP / HTTP работать через NAT. Запрос GET не получает ответа со стороны WAN, поэтому я застрял и думаю об альтернативах!

Время вопросов: 1. Можно ли это сделать с помощью netfilter и таблиц IP? вместо того, чтобы корчить свой собственный код NAT. 2. Существуют ли какие-либо программы NAT с открытым исходным кодом для пользовательского пространства, которые я мог бы взять и изменить? 3. Могу ли я изменить текущий код netfilter? это будет огромная задача?

Мои инструменты: libpcap, gcc, wirehark, сервер ubuntu 10.10

Я новичок в сетевом программировании Linux, любые предложения будут оценены.

Спасибо,

Mal

Я не понимаю, почему использование статической адресации может быть проблемой. Netfilter поддерживает NAT и его легко собрать с помощью iptables.

Если "eth0" представляет ваш интерфейс на стороне LAN на сервере, а eth1 - на стороне WAN, выполнение "iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE" (минимум, необходимое для NAT) должно сделать это.

Хотя вам, возможно, потребуется проверить политики по умолчанию, особенно для цепочки FORWARD (iptables -P FORWARD ACCEPT / DROP).