For nano-scale communications, there must be cooperation and simultaneous communication between nano devices. To this end, in this paper we investigate two-way (a.k.a. bi-directional) molecular communications between nano devices. If different types of molecules are used for the communication links, the two-way system eliminates the need to consider self-interference. However, in many systems, it is not feasible to use a different type of molecule for each communication link. Thus, we propose a two-way molecular communication system that uses a single type of molecule. We develop a channel model for this system and use it to analyze the proposed systems bit error rate, throughput, and self-interference. Moreover, we propose analog- and digital- self-interference cancellation techniques. The enhancement of link-level performance using these techniques is confirmed with both numerical and analytical results.