A cube cannot be dimensioned by the same AW dimension, IP say, twice. The solution is to define two AW dimensions, SOURCE_IP and DEST_IP say, in the AW that both point to the same base dimension table. You can then dimension the cube by both SOURCE_IP and DEST_IP and map accordingly.
Obviously I don't know all your requirements, but the approach you outlined makes sense. When I said "base dimension table" I meant something like the "one relational table IPTable" you mentioned. If you define two views on top of this one table, then the mapping becomes very clean.