Modular components for network address translation

We present a general-purpose toolkit for network address translation in Click, a modular, component-based networking system. Network address translation, or NAT, was designed to allow disparate address realms to communicate. The components of our toolkit can be combined in a variety of ways to implement this task and many others, including some that, superficially, have nothing to do with address translation. Our NAT components are more flexible than monolithic alternatives. They concern themselves solely with address translation; separate components handle related functions, such as classification. The user can choose where network address translation takes place in relation to other router functions; combine multiple translators in a single configuration; and use NAT in unintended, surprising ways. We describe our design approach, demonstrate its flexibility by presenting a range of examples of its use, and evaluate its performance. Our components have been in use in a production environment for over eighteen months.